我正在尝试确定以下 mypy 警告是否告诉我一些重要的事情。
import numpy as np
from numpy import typing as npt
def test(a: npt.ArrayLike) -> npt.NDArray:
a = np.asarray(a)
a = np.abs(a)
return a
这会导致
return a
行出现以下警告。
不兼容的返回值类型(得到“_SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | 字节]”,预期“ndarray[Any,dtype[Any]]”)Mypyreturn-value
以下两项工作都不会出现警告:
return np.abs(a)
b = np.abs(a)
return b
所以我无法判断在
a
中将 np.abs
重新分配给自身是否真的存在问题,或者这是否是 numpy
打字的众多微妙之处之一,我应该解决它。许多其他 numpy
函数(np.sin
、np.ceil
等)仍然存在该警告。
Pyright 正确推断了
ndarray
的类型并且没有抱怨。
其他变体起作用的原因是 mypy 放弃并将它们标识为
Any
,这意味着它会检查任何约束。
PS:您可以使用
typing.reveal_type
来了解类型检查器认为表达式是什么类型。