Python-mypy:foat和int是与数字不兼容的类型.真实



我是Python静态类型模块mypy的新手。我正试图将int和float附加到一个数组中,我静态地键入该数组以使其为Real。但mypy表示,它们与Real是不兼容的类型。我以为int和float是Real的一个子类型?

from typing import List
from numbers import Real
data : List[Real] = []
with open(path, 'r') as file:
for line in file:
line = line.strip()
if subject == 'time':
data.append(float(line))
else:
data.append(int(line))

错误消息:

graph.py:56: error: Argument 1 to "append" of "list" has incompatible type "float"; expected "Real"
graph.py:58: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "Real"

正如AChampion所说,您可以使用float来代替numbers.Real。Pep 0484(特别是这里(基本上说,在类型检查的上下文中,尊重层次结构complex > float > int,并且不需要使用numbers.*

这是mypy的一个已知"问题",并在这里提出和讨论。我还没有阅读整个讨论,但tldr似乎认为Pep 0484足以使这成为一个低优先级的问题(而且它已经5年没有解决了(。

我要说的是(正如问题讨论所提到的(,如果mypy在其错误消息中指出这是一个已知问题,那就太好了,而它目前(mypy 0.991(没有这样做。

最新更新