打印信息,而不是在valuerror的整数用户输入?(Printing message rather

2019-09-28 06:05发布

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

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

不过,我是正确的思维是什么,我尝试了用户输入行后添加不会起作用,因为该计划将终止其获取对前行?

任何其他的建议?

Answer 1:

我相信,被认为是最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)


Answer 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:错误和异常的详细信息。 按照该文档中, try声明的工作原理如下:

  • 首先, try条款(的声明(S) tryexcept关键字)被执行。
  • 如果没有异常发生时, except条款被跳过,执行try语句执行完毕。
  • 如果执行过程中发生了异常try条款,该条款的其余部分被跳过。 那么,如果它的类型后,除了关键字命名的异常匹配,except子句被执行,try语句后,再继续执行。
  • 如果发生异常不匹配在指定的例外except条款,它被传递到外try报表; 如果没有处理被发现,它是一个未处理的异常并执行与消息停止如上所示。


文章来源: Printing message rather than valuerror in an integer user input?