python是一种高级编程语言,具有简洁语法、跨平台特性及丰富库支持,广泛应用于web开发、数据分析、人工智能等领域。

Python
写 str | int 在 Python 3.9 或更早版本里,解释器在 parse 阶段就拒绝——根本不会走到 mypy 或运行时。错误信息是 SyntaxError: invalid syntax,位置精准指向类型注解那一行。这不是类型检查器不支持,而是 Python 解释器根本不认识这个语法。
- 常见误判:看到报错就去调 mypy 配置,其实连
import都失败,根本没机会执行类型检查 - 验证方法:在目标环境跑
python -c "def f(x: str | int): pass",如果报错,说明版本不够,别折腾 typing 配置 - CI/CD 中尤其容易踩坑:构建机是 3.10,但测试脚本用 3.9 运行,
import失败导致整个 pipeline 中断
typing.Union 导入失败可能是环境污染,不是代码写错了
ImportError: cannot import name 'Union' from 'typing' 看似是代码问题,实际常因虚拟环境里装了第三方 typing 包(比如过时的 typingPyPI),覆盖了标准库模块。Python 3.10+ 的 typing 模块内部结构有调整,第三方包可能未适配。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 先查加载路径:
python -c "import typing; print(typing.__file__)",确认输出是不是标准库路径(如lib/python3.10/typing.py) - 误装的
typing包通常来自旧项目残留或手动 pip install typing(标准库不需要装) - 修复方式:删掉
typing和typing-extensions,再重装typing-extensions(仅用于兼容旧版本),不要碰typing
字符串字面量注解能绕过 SyntaxError,但带来新限制
写 def f(x: "str | int") 可让旧版本 Python 安全跳过解析,但它不是“完美兼容方案”,而是一种妥协。
-
get_type_hints()返回的是原始字符串,无法直接拿到Union对象,反射逻辑会失效 - 嵌套场景如
Callable[[], str | int]会被某些检查器拒绝,必须加括号写成Callable[[], (str | int)] -
NewType或TypeVar的bound参数不接受字符串,只能传真实类型对象,这类地方仍得用Union
| 运算符只在类型标注中合法,运行时不能当类型对象用
int | str 是 AST 层级的语法糖,它生成 types.UnionType 实例,但该类型不参与运行时类型判断逻辑。
-
isinstance(x, int | str)必报TypeError,必须写成isinstance(x, (int, str)) - 动态构造类型(比如传给第三方库的类型注册函数)时,
int | str无法替代Union[int, str] - IDE 补全依赖 Python 版本识别:PyCharm / Pylance 若没设对 interpreter version,输完
int |可能不提示后续类型
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










