while循环中try与if语句的异常触发问题咨询
问题分析与解决
嘿,我来帮你搞清楚这个问题的根源~
你现在的困惑点在于:为什么输入非1的数字时,代码不会走到except语句里?其实核心原因很简单——except块只会在try代码块内部抛出异常的时候才会执行,而输入非1的数字时,并没有异常发生:
- 当你输入'2'、'3'这类数字字符串时,
int(click)是可以成功把它转换成整数的,这个过程不会抛出任何异常; - 接下来执行
if int(click) == 1的判断,结果是False,所以不会执行break,但也没有触发异常; - 于是代码就直接跳出
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
相关产品推荐
相关产品推荐

