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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:54:04