while循环中try和if语句的问题

问题描述 投票:0回答:4

我以为我清楚地理解了异常处理,而循环和条件语句。但是我遇到了这个简单的问题,即我的代码执行永远不会到达except语句。

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

while True:
    click = input('Press 1')
    try:
        if int(click) == 1:
            print('correct')
            break
    except:
        print('wrong')
python if-statement exception
4个回答
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')

有关详细信息,请参阅https://docs.python.org/2/tutorial/errors.html


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')

0
投票

只有在出现错误时,代码才会转到异常。如果输入非数字字符,将会出现这种情况。但是如果输入除1之外的任何数字,则没有错误,因此控件不会移动到异常。如果使用raise关键字输入1以外的数字,您可以创建错误。

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

0
投票

你不需要在这里处理异常;你不关心click的整数值。

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

如果你关心整数值,你只想捕捉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')
© www.soinside.com 2019 - 2024. All rights reserved.