Skip to content

typed except 与 except as alias 未按 Python 3 语义匹配和绑定 #368

Description

@pikasTech

目标合并分支: 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 净变化,整体资源不得无界膨胀。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions