这里"if False:"的目的是什么?

What is the purpose of "if False:" here?

https://github.com/asottile/pyupgrade/blob/fecacc91e57c224a0bd2564579ef01238650126c/pyupgrade.py#L53

if False:  # pragma: no cover (mypy)
    from typing import Type
    if sys.version_info >= (3,):
        AsyncFunctionDef = ast.AsyncFunctionDef
    else:
        AsyncFunctionDef = ast.stmt

提交没有透露: https://github.com/asottile/pyupgrade/commit/fecacc91e57c224a0bd2564579ef01238650126c#diff-8213eba6a28bcc759225cd8cf49b2fd1

False 在 Python 2 中可以是真实的(可以重新定义)但在 Python 3 中不是。这可能是个玩笑,或者正在进行中,或注释代码的方式,但这是一个相当成熟的工具 - 我是否遗漏了什么?

运行 时从不需要 AsyncFunctionDef 的值,只有 mypy 在两个 Python-2 兼容的类型提示中(第 1298 和 1318 行) ). if False 防止赋值发生在 运行 时间,但让 mypy 看到在类型检查期间使用的正确基础类型。 (它还可以防止在尝试导入 Python 2 下的 typing 模块时引发 ImportError。)

使用typing.TYPE_CHECKING会更清楚(其值在运行时为False,但在mypy时为True 运行s) 这里,除了 typing.TYPE_CHECKING 在 Python 2.

中不可用

if Falseif typing.TYPE_CHECKING 上使用,因为 pyupgrade 支持 python3.5.0-3.5.2 而没有 typing.TYPE_CHECKING -- 你可以找到更多信息在 flake8-typing-imports(我也是这个 flake8 插件的作者)

在 3.5.3+ 和 typing 向后移植(适用于任何 <3.5)TYPE_CHECKING 可用

免责声明:我是 pyupgrade 的作者