我想对int()进行输入验证,但验证str()

时间:2015-06-16 03:15:21

标签: python validation debugging python-3.x optimization

当用户的输入为< = 0且输入=“停止”时,我希望代码“中断”。 这是我到目前为止所做的。

while True:

    try:
        x = input("how many times do you want to flip the coin?: ")
        if int(x) <= 0 or x.lower() == "stop": 
            break
        x = int(x)
        coinFlip(x)


     except ValueError:
        print ()
        print ("Please read the instructions carefully and try one more time! :)")
        print ()

我收到错误:

    if int(x) <= 0 or str(x).lower() == "stop":
ValueError: invalid literal for int() with base 10: 'stop'

2 个答案:

答案 0 :(得分:2)

你得到了例外,因为第一个被评估的条件是int(x) <= 0而x此时并不是真正的整数。

您可以更改条件的顺序:

if x.lower() == 'stop' or int(x) <=0

这样您首先检查'stop',并且不评估int(x)(因为or条件已经评估为True)。任何不是整数且不是'stop'的字符串都会导致您已经处理的ValueError例外。

答案 1 :(得分:1)

您得到ValueError,因为您无法将字符串'stop'转换为整数。

解决此问题的一种方法是使用正确捕获ValueError的辅助方法,然后检查字符串是否为stop

def should_stop(value):
    try:
        return int(value) <= 0
    except ValueError:
        return value.lower() == "stop"

while True:
    x = input("how many times do you want to flip the coin?: ")
    if should_stop(x): 
        break