Python 3.8: странное поведение блока try-кода внутри цикла while - PullRequest
1 голос
/ 15 марта 2020

У меня есть следующая Python функция:

def bet():
  my_bet = -1
  while my_bet < 0 or my_bet > 49:
    print("before input")
    my_bet = input("Enter a bet: ")
    print("after input")
    try:
        my_bet = int(my_bet)
        if my_bet < 0 or my_bet > 49:
            print("Bet must be between 0 and 49")
    except:
        print("Need a number between 0 and 49")
        continue
    return my_bet

Когда я запускаю это в Windows 10, я вижу следующее поведение:

>>> bet()
before input
enter a bet: ddd
after input
need a number between 0 and 49
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in bet
TypeError: '<' not supported between instances of 'str' and 'int'

У меня также есть попытался переместить оператор if после преобразования в int в предложение else оператора try, с тем же результатом. Похоже, что преобразование запускается, вызывает исключение, затем запускается блок исключений, но вместо продолжения l oop он выполняет оставшуюся часть блока кода try. Согласно описанию Python, я не ожидал бы, что оставшаяся часть блока try будет вызвана после возникновения исключения. Что я делаю не так?

1 Ответ

0 голосов
/ 15 марта 2020

Спасибо Vorspring durch Technik за то, что он указал на то, что должно было быть очевидным: после продолжения выполняется проверка while l oop, которое совпадает с тестом оператора if.

...