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
相关产品推荐
相关产品推荐

