Python:未知类型提示不会因 __future__ import 引发异常

标签 python type-hinting

所有类都需要先定义才能用作类型提示。为了在某​​些情况下解决这个问题,__future__ import is recommended 。这就是为什么以下代码可以正常工作(在 Python 3.7 中):

from __future__ import annotations


class Person:
    def get_relative(name: str) -> Person:
        ...

如果没有 __future__ 导入,则会引发 NameError。但这段代码也可以正常工作:

from __future__ import annotations


class Person:
    def get_relative(name: BlahBlahTypoWhatever) -> Person:
        ...

我预计会出现类似 NameError: name 'BlahBlahTypoWhatever' is not Defined 的情况。这是预期的行为吗?

最佳答案

Python 本身不进行任何类型检查,因此它不会引发任何有关错误类型的错误。

annotations future 只是隐式地将所有注释更改为字符串,即,这是等效的:

from __future__ import annotations

def foo(bar: Baz): pass
def foo(bar: 'Baz'): pass

由于您的注释现在是一个字符串,并且 Python 不会对它执行任何操作,因此在任何时候都绝对不会对该名称进行任何解析,因此不会引发任何错误。

关于Python:未知类型提示不会因 __future__ import 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729069/

相关文章:

python - 需要扩展库存日志(日志) Pandas 数据框以包含每个产品 ID 的所有日期

python - 对列表列表中分组的多个列表应用不同的权重 - Python

Python字符串,找到特定的单词,然后复制它后面的单词

Python 类型提示 : how to tell X is a subclass for Foo?

python - 如何使用python类型提示动态地将父方法的返回类型指定为子类?

python - MyPy- "Incompatible types in assignment (expression has type None, variable has type ...)"

python - 如何使用 Python win32com 调用 Excel VBA 函数和子函数?

python - 字符串到 int 的转换错误?

python-3.x - 向函数添加可选参数

python - Type[dataclass] 的类型提示在 Pycharm 中不起作用