【发布时间】:2022-01-14 10:53:57
【问题描述】:
我有一个如下所示的函数:
import numpy as np
def test() -> None:
a = map(np.radians, (1.,2.,np.array([1,2,3])))
用 mypy 计算会返回错误信息
error: Argument 1 to "map" has incompatible type "ufunc"; expected "Callable[[object], Any]"
仅使用浮点数或仅数组作为map 的输入列表在这里没有问题,当输入列表/元组包含两种类型的对象时就会出现问题。在运行时,这也没有问题。
如何修改此函数以满足 mypy 的要求并使其类型安全?
【问题讨论】:
-
喜欢
def test() -> None: f = np.radians # type: Any; a = map(f, (1., 2., np.array([1, 2, 3])))?你只是想摆脱错误信息? -
@ThomasWeller 有没有更好的方法来做到这一点?这是 numpy 固有的错误还是我可以正确完成的错误?
-
就个人而言,我正在使用 Pycharm。它也使用类型提示并给出警告,但它不像 mypy 那样严格。你为什么使用mypy?编写更好的代码还是由您的雇主强制执行?
-
@ThomasWeller 我们有一个软件,我们想让它类型安全,并为此目的使用 mypy。你会建议我们如何处理这个问题?为此添加新行或根本不注释整个函数是否有意义?
-
抱歉,我不是这方面的专家。让我们拭目以待其他人怎么说。我认为以下几点:a)您知道它不会出现运行时错误 b)它似乎更像是一个 numpy 问题,它如何声明方法而不是您的问题。例如。
def test() -> None: f = lambda x: np.radians(x); a = map(f, (1., 2., np.array([1, 2, 3])))也不会有 mypy 报告,但您可能会失去性能(矢量化)。就 Sp 个人而言,我可能会选择# type: ignore整行。
标签: python numpy type-hinting mypy