Python 任何类型(无类型除外)的Mypy注释

Python 任何类型(无类型除外)的Mypy注释,python,mypy,Python,Mypy,我如何注释一个类型,它可以是除None以外的任何类型?换句话说,这种类型是Any,但不是None你可以做Union[int,str,…]但从该Union中排除None。你不能。这是无法表达的。有趣的问题是,您是否有一个特定的用例,其中“只要不完全是None,就给我您想要的任何东西”是一个有用的要求?@Nikrasmertsch想象一个函数,它接受一个文件路径,并确定文件的性质,并返回表示文件内容的适当对象(例如,如果确定文件为纯文本,则返回str;如果确定文件为图像,则返回PIL.Image;如

我如何注释一个类型,它可以是除
None
以外的任何类型?换句话说,这种类型是
Any
,但不是
None

你可以做
Union[int,str,…]
但从该Union中排除
None

你不能。这是无法表达的。有趣的问题是,您是否有一个特定的用例,其中“只要不完全是
None
,就给我您想要的任何东西”是一个有用的要求?@Nikrasmertsch想象一个函数,它接受一个文件路径,并确定文件的性质,并返回表示文件内容的适当对象(例如,如果确定文件为纯文本,则返回
str
;如果确定文件为图像,则返回
PIL.Image
;如果文件为其他内容,则返回
bytes
)。进一步设想该函数位于一个包中,该包允许用户注册自己的类型确定器和处理程序。并且设计决定返回类型不能为None。那么返回类型实际上可以是除None之外的任何类型。我明白了,但是为什么要在这样的东西上添加类型注释呢?与
Any
相比,
AllExcept[None]
的实际好处是什么?是否不允许用户注册可能导致
None
的处理程序?在我看来,这将是
Any
@nikramsertsch的一个好地方的完美例子。这就是重点:用户不能注册一个可能导致
None
的处理程序。我认为,
AllExcept[None]
的好处有多大有些主观。有人可能会说它确实没有带来任何东西,但也有人可能会说它澄清了函数可以做得更好的地方。这不会是
Any
though@xuhdev如果返回类型不能是
None
,则返回类型将不会是
Any
。抱歉,我的意思是
Any
-
None
如果您不想使用
Union
,您可以创建自己的类型。@Flair--typing.type不允许您创建类型。相反,它是一种表示类型类型的方式。例如,如果我们执行
var1=3
,则
var1
的类型为“int”。但是如果我们执行
var2=int
,会怎么样?var2的类型是什么?在本例中,它将是“typing.Type[int]”。