Python:未知类型提示不会引发 __future__ 导入的异常
Python: Unknown type hint does not raise exception with __future__ import
所有 类 都需要先定义,然后才能用作类型提示。为了在某些情况下绕过它,__future__
导入 。这就是以下代码工作正常的原因(在 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 不会对其进行任何操作,因此绝对不会在任何时候解析该名称,因此不会引发任何错误。
所有 类 都需要先定义,然后才能用作类型提示。为了在某些情况下绕过它,__future__
导入
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 不会对其进行任何操作,因此绝对不会在任何时候解析该名称,因此不会引发任何错误。