mypy给出错误,因为类型不兼容“ Optional [int]”;预期的“ Union [SupportsFloat,str,字节,字节数组]

时间:2019-06-07 12:06:24

标签: python mypy

在我的代码中运行mypy 0710版本时出现错误。我制作了一个有问题的小代码段,但不确定为什么会出现此错误

a = None
version = 2
if version == 2:
    a = 10
    #print("asdfgh")

if float(a) == 10:
    print("erty")

在mypy中以以下方式运行代码时出现错误

tests / test.py:8:错误:“ float”的参数1具有不兼容的类型“ Optional [int]”;预期为“ Union [SupportsFloat,str,字节,字节数组]”

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

这里的问题是mypy无法理解您的version变量总是 正好是2,因此不理解您的第一个if语句总是 运行。

如果第一个if语句仅在某些时候运行,则意味着a有时将永远不会被赋值为10,并且将保持为None。以后可能会导致类型错误:float(None)无效。

最简单的解决方法是删除不必要的if-check:

a = None
version = 2
a = 10

if float(a) == 10:
    print("erty")

...或者添加一个“其他”情况,如果a不等于2,则将version设置为其他值。

a = None
version = 2
if version == 2:
    a = 10
else:
    a = 99

if float(a) == 10:
    print("erty")

...或断言a的类型为int:

a = None
version = 2
if version == 2:
    a = 10

assert isinstance(a, int)

if float(a) == 10:
    print("erty")

我个人建议第一种解决方案有所变化。