我有一个十进制到二进制转换器,如下所示:
print ("Welcome to August's decimal to binary converter.")
while True:
value = int(input("Please enter enter a positive integer to be converted to binary."))
invertedbinary = []
initialvalue = value
while value >= 1:
value = (value/2)
invertedbinary.append(value)
value = int(value)
for n,i in enumerate(invertedbinary):
if (round(i) == i):
invertedbinary[n]=0
else:
invertedbinary[n]=1
invertedbinary.reverse()
result = ''.join(str(e) for e in invertedbinary)
print ("Decimal Value:\t" , initialvalue)
print ("Binary Value:\t", result)
用户输入立即声明为整数,所以比输入的数字以外的任何终止程序,并返回一个ValueError
。 我怎样才能使它所以打印一条消息,而不是程序与终止ValueError
?
我试图采取从我的二进制到十进制转换器所使用的方法:
for i in value:
if not (i in "1234567890"):
我很快意识到,将无法正常工作value
是一个整数,而不是字符串。 我在想,我可以在默认的字符串保留用户输入,再后来将其转换为int
,但我觉得这是懒惰和粗暴的方式。
不过,我是正确的思维是什么,我尝试了用户输入行后添加不会起作用,因为该计划将终止其获取对前行?
任何其他的建议?
我相信,被认为是最Python的方式在这种情况下是包裹行你就可能会在一个try / catch异常(或尝试/除外),并显示一个适当的消息,如果你得到一个ValueError
例外:
print ("Welcome to August's decimal to binary converter.")
while True:
try:
value = int(input("Please enter enter a positive integer to be converted to binary."))
except ValueError:
print("Please, enter a valid number")
# Now here, you could do a sys.exit(1), or return... The way this code currently
# works is that it will continue asking the user for numbers
continue
另一种选择,你有(但比处理异常慢得多)是不是转换到, int
立刻,检查输入字符串是否是使用了一些str.isdigit()
的字符串的方法和跳过循环(使用continue
语句),如果它不是。
while True:
value = input("Please enter enter a positive integer to be converted to binary.")
if not value.isdigit():
print("Please, enter a valid number")
continue
value = int(value)
您需要处理ValueError
使用异常try/except
块。 您的代码应该是这样的:
try:
value = int(input("Please enter enter a positive integer to be converted to binary."))
except ValueError:
print('Please enter a valid integer value')
continue # To skip the execution of further code within the `while` loop
如果用户进入不能被转换为任何值int
,它会提高ValueError
的异常,这将是由处理except
块和将打印你提到的消息。
阅读的Python:错误和异常的详细信息。 按照该文档中, try
声明的工作原理如下:
- 首先,
try
条款(的声明(S) try
和except
关键字)被执行。 - 如果没有异常发生时,
except
条款被跳过,执行try
语句执行完毕。 - 如果执行过程中发生了异常
try
条款,该条款的其余部分被跳过。 那么,如果它的类型后,除了关键字命名的异常匹配,except子句被执行,try语句后,再继续执行。 - 如果发生异常不匹配在指定的例外
except
条款,它被传递到外try
报表; 如果没有处理被发现,它是一个未处理的异常并执行与消息停止如上所示。