首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态定义`typing.Union`?

如何动态定义`typing.Union`?
EN

Stack Overflow用户
提问于 2020-07-16 00:14:48
回答 1查看 782关注 0票数 4

我在一些项目中使用了Typeguard来在Python语言中进行运行时的类型检查。它工作得很好。

我遇到过这样一种情况:函数参数的类型是由几个动态收集的数据类型组成的typing.Union。例如。

代码语言:javascript
复制
def find_datatypes():
    # some stuff ...
    return (str, int) # dynamically generated list / tuple

datatypes = find_datatypes()

现在,我想从datatypes生成一个typing.Union,以供最终在函数中使用。我原以为解包语法会起作用:

代码语言:javascript
复制
my_union = typing.Union[*datatypes]

@typeguard.typechecked
def some_function(param: my_union):
    pass

然而,它并没有:

代码语言:javascript
复制
    my_union = typing.Union[*datatypes]
                            ^
SyntaxError: invalid syntax

我将如何实现我想要的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 01:10:26

你可以这样做:

代码语言:javascript
复制
my_union = typing.Union[datatypes]

在运行时,thing[x, y]已经等同于thing[(x, y)]

也就是说,有一些限制需要牢记。特别是,当使用字符串注释(这将成为Python3.10中的默认注释)时,my_union必须在some_function的全局命名空间中可用,以便typeguard或其他任何东西能够在运行时解析注释。这限制了许多闭包用例,以及动态添加注释的大量尝试。

此外,正如您可能预期的那样,mypy不会认为这些都是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62919271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档