Python新手编写切削类型校验代码触发双重异常问题求助
问题根因
你遇到的双异常输出是Python异常处理的默认上下文机制导致的,触发逻辑如下:
- 当你输入非法值进入
else分支时,首先会抛出第一个Exception('Cut Type not Valid') - 这个异常被下方的无差别
except块捕获,执行完打印逻辑后,你又在except块内抛出了第二个新的Exception - Python会自动将前一个异常作为上下文关联到新异常上,最终输出你看到的两段异常栈信息
你删除任意一处raise后无异常抛出的原因:
- 若删除
else分支的raise:try代码块全程无异常抛出,except块根本不会触发,程序会正常往下执行 - 若删除
except块的raise:就算else分支抛出异常,except块捕获后只会打印提示,不会继续向外抛出异常,程序也能正常执行到最后打印valid_type
额外代码问题优化
你当前代码还存在一个不必要的列表包装问题:你把input的返回值套进了列表里再做匹配,直接用字符串判断会更简洁,优化参考代码如下:
# 直接存储输入字符串,不需要套列表 cut_type = input("Enter cut type Straight(S) or Arc(A)" ) # Add Taper later valid_type = ['N'] try: # 统一转大写判断,简化多分支逻辑 if cut_type.strip().upper() in ('S', 'A'): valid_type = ['Y'] else: raise Exception('Cut Type not Valid') except Exception: print('NOT VALID TYPE') # 若需要终止程序可打开下方注释,加from None可屏蔽上下文异常栈 # raise Exception('Cut Type not Valid') from None print(valid_type)
内容的提问来源于stack exchange,提问作者Tony Mixer
相关产品推荐
相关产品推荐

