我在一些项目中使用了Typeguard来在Python语言中进行运行时的类型检查。它工作得很好。
我遇到过这样一种情况:函数参数的类型是由几个动态收集的数据类型组成的typing.Union。例如。
def find_datatypes():
# some stuff ...
return (str, int) # dynamically generated list / tuple
datatypes = find_datatypes()现在,我想从datatypes生成一个typing.Union,以供最终在函数中使用。我原以为解包语法会起作用:
my_union = typing.Union[*datatypes]
@typeguard.typechecked
def some_function(param: my_union):
pass然而,它并没有:
my_union = typing.Union[*datatypes]
^
SyntaxError: invalid syntax我将如何实现我想要的?
发布于 2020-07-16 01:10:26
你可以这样做:
my_union = typing.Union[datatypes]在运行时,thing[x, y]已经等同于thing[(x, y)]。
也就是说,有一些限制需要牢记。特别是,当使用字符串注释(这将成为Python3.10中的默认注释)时,my_union必须在some_function的全局命名空间中可用,以便typeguard或其他任何东西能够在运行时解析注释。这限制了许多闭包用例,以及动态添加注释的大量尝试。
此外,正如您可能预期的那样,mypy不会认为这些都是有效的。
https://stackoverflow.com/questions/62919271
复制相似问题