我正在玩 mypy 中的
Never
类型。如果我有一个函数 foo(x: int)
我预计当使用 Never
类型的值调用时 mypy 会抱怨,但它会默默地对调用进行类型检查:
from typing import Never
def foo(x: int):
pass
def bar(x: Never):
foo(x) # ok, I exected a type error
foo("foo") # err
这是正常现象。
Never
是所有其他类型的子类型。毕竟,Never
是没有值的类型。所有 Never
类型的值都是所有其他类型的值,因为没有
Never
类型的值。
Never
类型暗示它的值永远不会被创建,这意味着像你的函数
bar
一样使用它的值的代码将never被运行,所以它被认为是死代码,一个检查没有必要。
Mypy 可能会认为某些代码无法访问,即使原因可能并不明显。需要注意的是,mypy 不会对此类代码进行类型检查。考虑这个例子: