我有一个十进制到二进制转换器,如下所示:
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
,但我觉得这是懒惰和粗暴的方式。
但是,我是否正确地认为在用户输入行之后我尝试添加的任何内容都无效,因为程序在到达该行之前会终止?
还有其他建议吗?
答案 0 :(得分:2)
您需要使用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: Errors and Exceptions了解详细信息。根据文档,try
语句的工作原理如下:
try
子句(try
和except
关键字之间的语句)。except
子句并完成try
语句的执行。try
子句期间发生异常,则跳过该子句的其余部分。然后,如果其类型匹配except关键字后面的异常,则执行except子句,然后在try语句之后继续执行。except
子句中指定的异常不匹配,则会将其传递给外部try
语句;如果没有找到处理程序,则它是一个未处理的异常,执行将停止,并显示如上所示的消息。答案 1 :(得分:1)
在这些情况下,我认为被认为是最 Pythonic 的方式是在try / catch(或try / except)中包含你可能获得异常的行,如果你有正确的消息获得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
您拥有的另一个选项(但比处理异常要慢得多)是,而不是立即转换为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)
,使用字符串的str.isdigit()
方法检查输入字符串是否为数字如果不是,则跳过循环(使用continue
语句)。
{{1}}