python3 在类型注释上引发属性错误

问题描述 投票:0回答:1

一些背景信息:我正在使用 mypy_protobuf 包。出于类型检查的目的,它会生成 .pyi 文件,并且对于模块 mmm 中的每个枚举包装器 Xxx,它将生成类型 mmm.XxxValue。所以我有一个功能。

def aaa(aaa: mmm.XxxValue) -> None:

它通过了 mypy 检查。当我开始执行程序时,在导入模块 python3 时会引发 AttributeError 因为 mmm 没有 XxxValue,这是正确的,但我希望 python3 可执行文件会简单地忽略注释。

python python-typing mypy grpc-python
1个回答
2
投票

PEP 3107 说:

所有注释表达式在执行函数定义时都会被求值,就像默认值一样。

因此,认为 python3 可执行文件会简单地忽略注释的期望是不正确的。 在您的情况下,将对它们进行评估并将结果存储在

aaa.__annotations__
映射中。

但是,从 Python 3.7 开始,您可以使用 future 语句推迟评估:

from __future__ import annotations

现在它们将作为字符串存储在

__annotations__
映射中。更多详细信息,请参阅 PEP 563 – 延迟评估注释,以及最近的 PEP 649 – 延迟使用描述符评估注释。

© www.soinside.com 2019 - 2024. All rights reserved.