使用typing.Union时无法获取参数类型信息的问题
解决typing.Union作为函数参数注解时无法获取类型参数的问题
你遇到的问题核心逻辑很明确:
- 直接定义
typing.Union[str,int]时,变量存储的是类型对象,typing.get_args可以正常解析它的类型参数。 - 但在函数内部调用
typing.get_args(y)时,y是传入的实际运行值(比如示例里的1是int类型的实例),并不是你定义的类型注解本身,所以get_args无法解析出任何类型参数,返回空元组。
正确的解决方法
要获取函数参数的类型注解,需要用inspect模块提取函数的注解元信息,再对注解对象调用typing.get_args:
import typing import inspect def f(y: typing.Union[str,int]): # 获取函数的签名与参数注解 sig = inspect.signature(f) param_annotation = sig.parameters['y'].annotation print(typing.get_args(param_annotation)) f(1)
输出:(<class 'str'>, <class 'int'>)
Python 3.10+ 简化写法
如果使用Python 3.10及以上版本,可以用|运算符替代Union,同样适用上述方法:
import inspect import typing def f(y: str | int): sig = inspect.signature(f) param_annotation = sig.parameters['y'].annotation print(typing.get_args(param_annotation)) f(1)
输出同样为:(<class 'str'>, <class 'int'>)
内容的提问来源于stack exchange,提问作者Cos
相关产品推荐
相关产品推荐

