在整数用户输入中打印消息而不是valuerror?

时间:2016-10-24 17:34:16

标签: python binary converter

我有一个十进制到二进制转换器,如下所示:

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,但我觉得这是懒惰和粗暴的方式。

但是,我是否正确地认为在用户输入行之后我尝试添加的任何内容都无效,因为程序在到达该行之前会终止?

还有其他建议吗?

2 个答案:

答案 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子句(tryexcept关键字之间的语句)。
  • 如果没有发生异常,则跳过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}}