如何解决python3在类型注释上引发属性错误
一些背景信息:我正在使用mypy_protobuf软件包。出于类型检查的目的,它将生成.pyi文件,并且对于模块mmm中的每个枚举包装器Xxx都将生成类型mmm.XxxValue。所以我有一个功能。
def aaa(aaa: mmm.XxxValue) -> None:
它通过了mypy检查。当我开始执行程序时,由于mmm没有XxxValue,因此在导入模块python3时会引发AttributeError,这是正确的,但我希望python3可执行文件会忽略注释。
解决方法
PEP 3107说:
所有注释表达式都在执行函数定义时进行评估,就像默认值一样。
因此,对python3可执行文件只会忽略注释的期望是不正确的。在您的情况下,系统会对它们进行评估,并将结果存储在aaa.__annotations__
映射中。
但是,从Python 3.7开始,您可以使用将来的语句来推迟评估:
from __future__ import annotations
现在它们将作为字符串存储在__annotations__
映射中。在Python 3.10中,这将成为默认行为。 PEP 563中的详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。