Python typehint如何实现排除某一指定类型的参数注解
实现方案
有两种可行的实现方式,分别适配不同的使用场景:
- 静态类型注解方案(仅类型检查阶段生效)
Python 3.10+ 配合新版类型检查工具(mypy≥0.990、pyright等)可以直接使用标准库的typing.Not实现类型排除,低版本Python可先安装typing-extensions包后导入该特性:
# Python 3.10+ 写法 from typing import Any, Not, TypeAlias AllTypesExceptList: TypeAlias = Any | Not[list] def some_func(arg: AllTypesExceptList) -> None: print(arg)
# 低版本Python兼容写法 from typing import Any, TypeAlias from typing_extensions import Not AllTypesExceptList: TypeAlias = Any | Not[list] def some_func(arg: AllTypesExceptList) -> None: print(arg)
- 运行时校验方案(执行阶段直接拦截非法参数)
如果不需要依赖静态类型检查工具,或者需要在代码实际运行时禁止list类型传入,可以直接在函数内部加类型判断,该方案不受Python版本限制:
def some_func(arg) -> None: if isinstance(arg, list): raise TypeError("参数不允许为list类型") print(arg)
如果你的开发环境里类型检查工具版本较低不支持Not语法,优先选择运行时校验方案,兼容性更强。
内容的提问来源于stack exchange,提问作者user16960082
相关产品推荐
相关产品推荐

