在我的代码中运行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,字节,字节数组]”
任何帮助将不胜感激
答案 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")
我个人建议第一种解决方案有所变化。