【问题标题】:Avoid ValueError outside a while loop?在while循环之外避免ValueError?
【发布时间】:2021-11-06 18:07:41
【问题描述】:

在第二行中,我试图让它在输入字符串但找不到使用异常或类似内容的方法时不会崩溃。在while循环中它正常工作,因为异常处理这种情况。

number = 0 #this to be removed
number = (float(input('pick a number'))) #I want to make this not crash if a string is entered.
while number not in [100, 200, 3232]:
    try:
        print('wrong number ')
        number = (float(input('pick a number;'))) #Here it does not crash if a string is entered which is fine
    except ValueError:
        print("retry")

【问题讨论】:

标签: python loops try-catch


【解决方案1】:

while 后跟可变条件通常会导致错误/重复代码 => 可维护性差。

使用while True 条件避免重复您的代码,然后在循环有效时中断循环。

while True:
    try:
        number = float(input('pick a number;'))
        if number in [100, 200, 3232]:
           break
        print("wrong number")
    except ValueError:
        print("illegal number, retry")

注意:在一般情况下要小心浮点相等(另请参阅strange output in comparison of float with float literalIs floating point math broken?

【讨论】:

  • 请有空时回答问题。如果列表也有浮点数,正确的方法是什么?
  • 查看我的编辑以了解浮动的潜在问题
【解决方案2】:

也许创建一个函数来接受输入:

def get_input():
    while True:
        a = input("Pick a number: ")
        try:
            return float(a)
        except:
            pass

【讨论】:

  • "5.0".isnumeric() 为假。
  • 没有提供他期望的输入。
猜你喜欢
  • 2020-02-09
  • 2013-08-29
  • 2018-12-06
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 2015-10-09
相关资源
最近更新 更多