python - mypy 给出错误,类型不兼容 "Optional[int]";预期“Union[SupportsFloat、str、bytes、bytearray]

标签 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、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")

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

关于python - mypy 给出错误,类型不兼容 "Optional[int]";预期“Union[SupportsFloat、str、bytes、bytearray],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56494013/

相关文章:

python - doc2vec:性能测量和 'workers' 参数

python输入: Is it possible to specify the type of a variable later than at its creation?

python - Mypy 索引类型 "str"为 "Union[str, Dict[str, str]]"无效;预期类型 "Union[int, slice]"

python-3.x - 变量 "foo_class"作为类型无效,但为什么呢?

python - 如何使具有值参数的子类化与 mypy 泛型兼容?

Python 类型提示和上下文管理器

python - 使用 mysql 占位符从 sql 表中选择时出错

python - 如何使用 python 中的枚举将值放入列表中?

python - 通过重复 2D numpy 数组中的值创建 4D numpy 数组

python - 如何从 setup.py 中读取来自 pyproject.toml 的项目依赖项,以避免在两个文件中重复信息?