“if False:”在这里的目的是什么?

Chr*_*nds 2 python boolean type-hinting python-3.x mypy

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
Run Code Online (Sandbox Code Playgroud)

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

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

che*_*ner 5

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

这将是更清晰的使用typing.TYPE_CHECKING(其值是False在运行时,但是Truemypy运行)的,除了typing.TYPE_CHECKING也是在Python 2不可用。


Ant*_*ile 5

if False因为pyupgrade支持if typing.TYPE_CHECKINGpython3.5.0-3.5.2而没有--你可以在flake8-typing-importstyping.TYPE_CHECKING中找到更多信息(我也是这个flake8插件的作者)

在 3.5.3+ 中,并且typing向后移植(在 <3.5 中可用)TYPE_CHECKING可用

免责声明:我是 pyupgrade 的作者