mypy 给出错误作为不兼容的类型“Optional[int]”;预期“Union[SupportsFloat、str、bytes、bytearray]

Nit*_*esh 6 python mypy

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

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

if float(a) == 10:
    print("erty")
Run Code Online (Sandbox Code Playgroud)

当我在 mypy 中运行代码时出现错误

测试/test.py:8:错误:“float”的参数 1 具有不兼容的类型“Optional[int]”;预期“Union[SupportsFloat、str、bytes、bytearray]”

任何帮助将不胜感激

Mic*_*x2a 11

这里的问题是 mypy 不明白你的version变量总是恰好是 2,因此不明白你的第一个 if 语句总是会运行

如果第一个 if 语句仅有时运行,则意味着a有时永远不会被分配值 10 并且将保持 None。这可能会导致稍后出现类型错误:float(None)无效。

最简单的修复方法是删除不必要的 if 检查:

a = None
version = 2
a = 10

if float(a) == 10:
    print("erty")
Run Code Online (Sandbox Code Playgroud)

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

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

if float(a) == 10:
    print("erty")
Run Code Online (Sandbox Code Playgroud)

...或者断言它将a是 int 类型:

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

assert isinstance(a, int)

if float(a) == 10:
    print("erty")
Run Code Online (Sandbox Code Playgroud)

我个人会推荐第一个解决方案的一些变体。