You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中While循环else分支无法执行的问题求助

问题原因及修正方案

核心问题1:错误的条件判断语法

你写的if {question == '2022'}是创建了一个集合,而非进行布尔判断。Python里非空集合会被当作True处理,所以这个if条件永远为真,else分支自然永远不会执行。正确写法应该去掉大括号,直接写if question == 2022:(注意2022是整数,不是字符串,因为你已经把输入转成int类型)。

核心问题2:类型不匹配

question是通过int(input(...))转换得到的整数类型,你却和字符串'2022'比较,整数与字符串永远不会相等,所以即使去掉大括号,question == '2022'的结果也是False——但原来的大括号问题掩盖了这个问题。

额外问题:循环逻辑错误

你的代码不管输入正确、错误,甚至捕获异常后都会立刻break,导致循环只运行一次,用户输入错误后无法重新尝试,不符合常规问答逻辑。


修正后的代码

while True:
    try:
        question = int(input("What year was the highest year of recorded cases?"))
    except ValueError:  # 只捕获输入无法转成整数的异常,不要捕获所有异常
        print("Error. Number required.")
        continue  # 异常后回到循环开头,让用户重新输入
    if question == 2022:  # 直接用布尔判断,且和整数2022比较
        print("Correct answer.")
        break  # 答对后退出循环
    else:
        print("Incorrect answer. Try again.")  # 答错提示并继续循环

关键修改点

  • 移除if条件里的大括号,直接使用question == 2022进行判断
  • 将比较目标从字符串'2022'改为整数2022,和question类型保持一致
  • 异常捕获改为具体的ValueError,避免捕获无关异常
  • 异常处理后用continue代替break,让用户可以重新输入
  • 答错后不直接break,让循环继续直到用户答对

内容的提问来源于stack exchange,提问作者Sheri Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:08