目标合并分支: master
问题
当前 parser/runtime 对具名异常分支和 alias 的处理与 Python 3 不一致。探测发现:
try:
1 / 0
except ValueError as err:
caught = 1
except ZeroDivisionError:
caught = 2
首个 typed except 可能捕获不匹配的异常;except ValueError as err 的异常类型条件和 err 绑定也可能被 parser 忽略。结果是脚本选择错误分支或 alias 不可用,而不是遵循 Python 3 的异常匹配语义。
期望
- typed
except 只捕获匹配类型。
- 多个
except 分支按声明顺序匹配,但不允许首个不匹配分支吞掉异常。
except X as alias 在 handler 作用域内提供对应异常对象或现有对象模型允许的等价错误值。
- 不匹配异常继续向后续 handler 或外层传播。
- 错误后 VM 栈和对象状态可恢复,释放后无堆残留。
边界
- 先确认当前异常字节码、handler 跳转和错误对象表示,再定义最小兼容合同。
- 不改变 VM、对象模型或字节码大架构。
- 不扩大到 Python 3 完整异常体系;只修复当前已经接受的 typed
except 与 alias 语法。
- 增加合法/非法邻接测试、异常类型错配测试、alias 可见性测试及 default/minimal 配置边界验证。
- 记录 default/minimal 的
text/data/bss 净变化,整体资源不得无界膨胀。
目标合并分支: master
问题
当前 parser/runtime 对具名异常分支和 alias 的处理与 Python 3 不一致。探测发现:
首个 typed
except可能捕获不匹配的异常;except ValueError as err的异常类型条件和err绑定也可能被 parser 忽略。结果是脚本选择错误分支或 alias 不可用,而不是遵循 Python 3 的异常匹配语义。期望
except只捕获匹配类型。except分支按声明顺序匹配,但不允许首个不匹配分支吞掉异常。except X as alias在 handler 作用域内提供对应异常对象或现有对象模型允许的等价错误值。边界
except与 alias 语法。text/data/bss净变化,整体资源不得无界膨胀。