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

Python类型注解疑问:|联合语法为何无法兼容字符串化注解?

问题原因与写法确认

为什么None | 'Ordinal'会报错

Python 3.10引入的|类型联合运算符,要求左右两边必须是类型对象(比如int、str或type(None))。但你写的'Ordinal'是字符串,并非类型对象,此时Python会把None当成普通的None值(而非type(None)类型),尝试对None和字符串执行|运算——这两个类型根本不支持该操作,因此触发TypeError。

第一种写法的正确性确认

Union[None, 'Ordinal']完全符合递归类型定义逻辑:

  • 字符串'Ordinal'是PEP 484规定的前向引用写法,专门解决类定义尚未完成时,无法直接引用自身类型的问题。
  • Union[None, 'Ordinal']明确表示children可以是None,或者Ordinal类型的实例,完全匹配你想要的递归类型约束。
  • 这种写法在所有支持PEP 484的类型检查器(如mypy、pyright)中都能被正确解析,运行时也不会报错。

内容的提问来源于stack exchange,提问作者Abhimanyu Pallavi Sudhir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:54:58