mypy 给出不兼容类型的错误 "Optional[int]";预期的“联盟[SupportsFloat,海峡,字节,bytearray]
mypy giving error as incompatible type "Optional[int]"; expected "Union[SupportsFloat, str, bytes, bytearray]
我在代码中使用 运行ning mypy 0710
版本时遇到错误。我制作了一个有问题的小代码片段,但不确定为什么会出现此错误
a = None
version = 2
if version == 2:
a = 10
#print("asdfgh")
if float(a) == 10:
print("erty")
当我 运行 mypy 中的代码 as
时出现错误
tests/test.py:8: 错误:参数 1 到 "float" 的类型不兼容 "Optional[int]";预计 "Union[SupportsFloat, str, bytes, bytearray]"
任何帮助将不胜感激
这里的问题是 mypy 不理解你的 version
变量将 总是 正好是 2,因此不理解你的第一个 if 语句将 总是 运行.
并且如果第一个 if 语句有时只会 运行,这意味着 a
有时永远不会被分配值 10,并且将保持 None。这可能会在以后导致类型错误:float(None)
无效。
最简单的修复方法是删除不必要的 if-check:
a = None
version = 2
a = 10
if float(a) == 10:
print("erty")
...或者添加一个 "else" 案例,如果 version
不等于 2,则将 a
设置为其他值:
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")
我个人会推荐第一个解决方案的一些变体。
我在代码中使用 运行ning mypy 0710
版本时遇到错误。我制作了一个有问题的小代码片段,但不确定为什么会出现此错误
a = None
version = 2
if version == 2:
a = 10
#print("asdfgh")
if float(a) == 10:
print("erty")
当我 运行 mypy 中的代码 as
时出现错误tests/test.py:8: 错误:参数 1 到 "float" 的类型不兼容 "Optional[int]";预计 "Union[SupportsFloat, str, bytes, bytearray]"
任何帮助将不胜感激
这里的问题是 mypy 不理解你的 version
变量将 总是 正好是 2,因此不理解你的第一个 if 语句将 总是 运行.
并且如果第一个 if 语句有时只会 运行,这意味着 a
有时永远不会被分配值 10,并且将保持 None。这可能会在以后导致类型错误:float(None)
无效。
最简单的修复方法是删除不必要的 if-check:
a = None
version = 2
a = 10
if float(a) == 10:
print("erty")
...或者添加一个 "else" 案例,如果 version
不等于 2,则将 a
设置为其他值:
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")
我个人会推荐第一个解决方案的一些变体。