Проблема с оператором try и if в цикле while - PullRequest
0 голосов
/ 30 марта 2019

Мне показалось, что я четко понимаю обработку исключений, в то время как цикл и условные операторы. Но я натолкнулся на эту простую проблему, заключающуюся в том, что выполнение моего кода никогда не достигает оператора исключений.

Я сделал код как можно более простым, чтобы указать на проблему. Таким образом, код требует нажать «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 голосов
/ 30 марта 2019

Здесь вам не нужна обработка исключений; вас не волнует целочисленное значение 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')
0 голосов
/ 30 марта 2019

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 голосов
/ 30 марта 2019

Вы путаете две вещи: повышение исключение и обработка возбужденное исключение.

Что вы хотите сделать здесь:

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

Затем вы можете обработать возникшее исключение, используя операторы try / Кроме того:

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 голосов
/ 30 марта 2019

Код перейдет к исключению только в случае ошибки.Что произойдет, если вы введете нецифровый символ.Но если вы введете любую цифру, кроме 1, ошибки не будет, поэтому управление не перейдет к исключению.Вы можете создать ошибку, если человек вводит цифру, отличную от 1, используя ключевое слово raise.

try:
    if(int(input())==1:
        print('entered 1')
    elif(int(input())!=1):
        raise ValueError(' enter 1 only')
except:
     print('error')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...