try和if语句在while循环中出现问题

时间:2019-03-30 15:50:40

标签: python if-statement exception

我认为我清楚地理解了异常处理,while循环和条件语句。但是我遇到了一个简单的问题,我的代码执行从未达到except语句。

我使代码尽可能简单,以指出问题所在。 因此,代码需要按“ 1”。只有这样,它才能逃脱while循环。其他任何事情都应该例外。诸如“ a”和“ b”之类的字符可以-因为它们不能转换为整数。但是任何其他数字都不会触发异常。它只是回到输入步骤。为什么会这样呢?显然,除1以外的任何其他数字都不等于1。

while True:
    click = input('Press 1')
    try:
        if int(click) == 1:
            print('correct')
            break
    except:
        print('wrong')

4 个答案:

答案 0 :(得分:0)

仅当出现错误时,代码才会进入异常状态。如果您输入非数字字符,则会发生这种情况。但是,如果输入的数字不是1,则没有错误,因此控制不会移至异常。如果有人使用raise关键字输入1以外的数字,则可能会产生错误。

try:
    if(int(input())==1:
        print('entered 1')
    elif(int(input())!=1):
        raise ValueError(' enter 1 only')
except:
     print('error')

答案 1 :(得分:0)

except仅在引发异常时到达。您可以在ValueError时强制代码抛出int(click) != 1。以下应该为您解决问题。

while True:
    click = input('Press 1')
    try: 
        if int(click) == 1:
            print('correct')
            break
        else:
            raise ValueError('wrong')
    except:
        raise ValueError('User input is not valid')

答案 2 :(得分:0)

您在混淆两件事:引发一个异常和处理一个引发的异常。

您要在这里做的是:

    while True:
        click = input('Press 1')
        if int(click) == 1:
            print('correct')
            break
        else:
            raise ValueError('Wrong')

然后您可以使用try / except语句来处理引发的异常:

while True:
        click = input('Press 1')

        try:
            if int(click) == 1:
                print('correct')
                break
            else:
                raise ValueError('Wrong')
        except ValueError:
            print('Something went wrong with user input, but this except block will handle it')

有关更多详细信息,请参见enter image description here

答案 3 :(得分:0)

这里不需要异常处理;您不必担心click的整数值。

while True:
    click = input('Press 1')
    if click == "1":
        print('correct')
        break
    print('wrong')

如果您 did 关心整数值,则只想捕获ValueError可能引起的int

while True:
    click = input('Press 1')
    try:
        click = int(click)
    except ValueError:
        print('Not an integer, try again')
        continue
    if click == 1:
        print('correct')
        break
    print('wrong')