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

Python3.9函数参数类型提示用|运算符触发TypeError的原因是什么

问题原因

你遇到的报错是因为PEP 604 定义的|运算符表示联合类型的语法,是Python 3.10及以上版本才默认支持的特性。
你使用的Python 3.9版本原生不支持该语法,运行时会把types.FrameType | None当作普通的位或运算执行,而type类型和NoneType类型并没有实现位或运算符,因此抛出TypeError。
其他人能正常运行该代码通常有两种可能:一是对方使用的Python版本≥3.10,二是对方在代码开头添加了未来特性适配声明。

解决方案

你可以根据自己的场景选择以下任意一种方案解决问题:

  • 方案1:添加未来特性声明(适配Python 3.7~3.9)
    在代码文件的最顶部(所有业务代码之前)添加如下导入语句即可:
    from __future__ import annotations
    该导入会让解释器将所有类型注解以字符串形式存储,运行时不会立即解析|运算符,因此不会触发类型错误。
  • 方案2:使用传统typing模块的类型写法
    如果不想引入未来特性声明,可以将注解替换为typing.Optional或typing.Union的传统写法:
import types
from typing import Optional

# Optional[X] 等价于 Union[X, None]
def start(caller_frame: Optional[types.FrameType] = None):
    pass
  • 方案3:升级Python版本
    直接将Python环境升级到3.10或更高版本,即可原生支持|运算符写联合类型的语法,无需额外修改代码。

内容的提问来源于stack exchange,提问作者porosity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:03