而x是ValueError:

0 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()
Run Code Online (Sandbox Code Playgroud)

如果用户输入非法响应,我希望通过添加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?: ")
Run Code Online (Sandbox Code Playgroud)

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

use*_*ica 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
Run Code Online (Sandbox Code Playgroud)

有关异常和错误的更多信息,请参阅教程.