如何检查Union[…]中的任何参数在python中是否为None?
我想过滤Union[…]中任何参数为None的代码。识别无参数的最佳方法是什么 我知道在Union[]中参数的顺序并不重要(从键入import Union开始),但是如何使用公共检查(可能是函数)来检测无参数如何检查Union[…]中的任何参数在python中是否为None?,python,union,Python,Union,我想过滤Union[…]中任何参数为None的代码。识别无参数的最佳方法是什么 我知道在Union[]中参数的顺序并不重要(从键入import Union开始),但是如何使用公共检查(可能是函数)来检测无参数 from typing import Union Union[T, None] 您可以使用函数属性\uuuuuuuuuuuuuuuuu: def my_func(a: Union[int, None], b: int, c: str): print(a,b,c) print(m
from typing import Union
Union[T, None]
您可以使用函数属性
\uuuuuuuuuuuuuuuuu
:
def my_func(a: Union[int, None], b: int, c: str):
print(a,b,c)
print(my_func.__annotations__) # {'a': typing.Union[int, NoneType], 'b': <class 'int'>, 'c': <class 'str'>}
示例:
>>> def b(a:int, b:None):
... print('hi')
...
>>> def c(x:Union[None,str], y:int):
... print('hi')
...
>>> def d(z: int, s:str):
... print('hi')
...
>>> check_if_func_accepts_none(b)
True
>>> check_if_func_accepts_none(c)
True
>>> check_if_func_accepts_none(d)
False
>>>
编辑:要回答您的评论,请直接检查Union
对象:
type(None) in obj.__args__
如果
None
存在,则返回True
,否则返回False
(假设obj
是一个Union
)密切相关/可能的重复:您到底想过滤哪些用Union[T,None]
注释的内容?表达式Union[T,None]
的值有一个\uuuu args\uuu
属性,该属性包含None
类型。@chepner的值仅为3.5以上。3.6之前的版本是\uuuuu union\uu params\uuuu
。我想检查union本身的参数。谢谢:)
type(None) in obj.__args__