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

while循环中try与if语句的异常触发问题咨询

问题分析与解决

嘿,我来帮你搞清楚这个问题的根源~

你现在的困惑点在于:为什么输入非1的数字时,代码不会走到except语句里?其实核心原因很简单——except块只会在try代码块内部抛出异常的时候才会执行,而输入非1的数字时,并没有异常发生:

  1. 当你输入'2'、'3'这类数字字符串时,int(click)是可以成功把它转换成整数的,这个过程不会抛出任何异常;
  2. 接下来执行if int(click) == 1的判断,结果是False,所以不会执行break,但也没有触发异常;
  3. 于是代码就直接跳出try块,回到while循环的开头,让你重新输入,完全没机会走到except里。

只有当输入无法被转换成整数时(比如'a'、'b'这类字符),int(click)才会抛出ValueError异常,这时候except块才会被触发。


修正后的代码示例

想要让非1的数字也触发"wrong"提示,你可以调整逻辑,把非1的情况也纳入处理,比如:

while True: 
    click = input('Press 1: ') 
    try: 
        num = int(click)
        if num == 1: 
            print('correct') 
            break 
        else:
            # 非1的数字,直接提示错误
            print('wrong')
    except ValueError: 
        # 捕获转换失败的异常(非数字输入)
        print('wrong')

额外小建议

尽量不要使用裸的except:,最好指定具体的异常类型(比如这里的ValueError)。裸except会捕获所有类型的异常(包括键盘中断、系统错误等),可能会掩盖你意料之外的问题,让代码调试变得更困难。

内容的提问来源于stack exchange,提问作者Kārlis Rieksts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:32:54