Какова цель "если False:" здесь? - PullRequest
2 голосов
/ 06 января 2020

https://github.com/asottile/pyupgrade/blob/master/pyupgrade.py#L55

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. Это может быть шутка, или работа в процессе, или способ комментирования кода, но это довольно зрелый инструмент. Я что-то упустил?

Ответы [ 2 ]

5 голосов
/ 06 января 2020

Значение AsyncFunctionDef никогда не требуется во время выполнения, только mypy в двух Python -2-совместимых подсказках типа (в строках 1298 и 1318). if False предотвращает выполнение назначений во время выполнения, но позволяет mypy видеть правильный базовый тип для использования во время проверки типа. (Это также предотвращает повышение ImportError при попытке импортировать модуль typing в Python 2.)

Было бы более понятно использовать typing.TYPE_CHECKING (значение которого False во время выполнения, но True, когда mypy работает) здесь, за исключением того, что typing.TYPE_CHECKING равно и недоступно в Python 2.

3 голосов
/ 14 января 2020

if False используется более if typing.TYPE_CHECKING, поскольку python3 .5.0-3.5.2 поддерживается pyupgrade и не имеет typing.TYPE_CHECKING - дополнительную информацию можно найти в flake8-typing-import (я также являюсь автором этого плагина flake8)

в 3.5.3+ и typing backport (доступно в любом <3.5) <code>TYPE_CHECKING доступно

отказ от ответственности : Я автор pyupgrade

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...