而x是ValueError:

时间:2013-11-13 07:46:29

标签: python python-2.7

我目前有这段代码:

yon = raw_input("were you running in km y or n?: ")
if yon is "y":
    kilnumber = raw_input("how many kilometers?: ")
    milnumber = 0
    try:
        float(kilnumber)
    except:
        print "You must enter a number"
        exit()

如果用户输入非法回复,我希望通过添加while循环来重新询问kilnumber来简化它。我希望有这样的事情:

yon = raw_input("were you running in km y or n?: ")
if yon is 'y':
    kilnumber = raw_input("how many kilometers?: ")
    milnumber = 0
    while float(kilnumber) is ValueError:
        print "You must enter a number"
        kilnumber = raw_input("how many kilometers?: ")

此代码不起作用,因为它在评估while循环之前发送错误消息。溶液

2 个答案:

答案 0 :(得分:5)

float(kilnumber)永远不会评估为ValueError。相反,它可能会抛出ValueError。你需要抓住它:

while True:
    try:
        float(kilnumber)
    except ValueError:
        # Not a valid number
        print "You must enter a number"
        kilnumber = raw_input("how many kilometers?: ")
    else:
        # No error; stop the loop
        break

有关例外和错误的更多信息,请参阅tutorial

答案 1 :(得分:0)

您认为这意味着什么?

while float(kilnumber) is ValueError:

float(kilnumber)永远不会是ValueError,它可以抛出一个。所以你必须使用try/catch。您可以将其放入while循环中,以检查指示输入了正确数据的变量。