如何检查Union[…]中的任何参数在python中是否为None?

如何检查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

我想过滤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(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__