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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:55:19