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

解析类型提示字符串,提取Tuple内部子类型的解决方案

解析Python Tuple类型提示的子类型方案

你完全不需要自己写复杂正则,有现成工具可以搞定:

第三方库:typing-inspect

这是专门针对Python类型提示设计的解析库,对嵌套类型的支持非常完善。

  • 安装:pip install typing-inspect
  • 示例代码:
from typing import Tuple, Union
import typing_inspect

# 你的目标类型字符串
type_str = "Tuple[Union[file.File, directory.Directory, Tuple[file.File, directory.Directory]], Tuple[file.File, directory.Directory]]"

# 把字符串转为实际类型对象(需提前导入file、directory模块里的类)
type_obj = eval(type_str)

# 直接提取元组的子类型
subtypes = typing_inspect.get_args(type_obj)
# 输出结果就是你要的列表/元组形式
print(subtypes)

标准库:ast

不想装第三方包的话,用Python自带的抽象语法树模块ast也能精准解析:

  • 示例代码:
import ast

def get_tuple_subtypes(type_str):
    # 解析字符串为AST节点
    tree = ast.parse(type_str, mode='eval')
    tuple_node = tree.body
    # 验证输入确实是Tuple类型
    if not (isinstance(tuple_node, ast.Subscript) and 
            isinstance(tuple_node.value, ast.Name) and 
            tuple_node.value.id == 'Tuple'):
        raise ValueError("输入不是合法的Tuple类型字符串")
    
    # 提取Tuple内的参数节点
    slice_node = tuple_node.slice
    if isinstance(slice_node, ast.Tuple):
        elements = slice_node.elts
    else:
        # 处理单元素元组的情况,比如Tuple[int]
        elements = [slice_node]
    
    # 将每个节点转回字符串形式
    return [ast.unparse(elem) for elem in elements]

# 测试
type_str = "Tuple[Union[file.File, directory.Directory, Tuple[file.File, directory.Directory]], Tuple[file.File, directory.Directory]]"
print(get_tuple_subtypes(type_str))

运行后会直接返回你期望的子类型字符串列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:07