【问题标题】:Python 3.8: strange behavior of try code block inside while loopPython 3.8:while 循环内 try 代码块的奇怪行为
【发布时间】:2020-03-14 21:48:04
【问题描述】:

我有以下 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'

我还尝试将转换为 int 后的 if 语句移动到 try 语句的 else 子句中,结果完全相同。看起来转换已经运行,引发了异常,然后运行了 except 块,但是它没有继续循环,而是执行了“try”代码块的其余部分。根据 Python 描述,在引发异常后,我不希望 try 块的其余部分。我做错了什么?

【问题讨论】:

  • 它没有运行其余的 try 代码,它会回到 while 循环的顶部。
  • 可以看到它引用了bet()函数的第3行。
  • 啊,是的,确实。我的错。谢谢。
  • 不客气。

标签: while-loop window try-except python-3.8


【解决方案1】:

感谢 Vorspring durch Technik 指出应该很明显的事情:在 continue 之后,执行的是 while 循环的测试,与 if 语句的测试相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-12-07
    相关资源
    最近更新 更多