【发布时间】:2019-08-11 04:34:13
【问题描述】:
我的 python 代码中有以下导入:
from apps.balance.models import BLOCKED, CREDIT, TRIAL, TrialAlert
但是 PEP8/flake8 告诉我 TrialAlert 没有被使用。在代码本身中,它确实没有被使用,但我确实在 MyPy 注释中使用它,所以我试图添加一个“noqa”只是为了它,但没有成功。如果我将行更改为
from apps.balance.models import BLOCKED, CREDIT, TRIAL, TrialAlert # noqa # pylint: disable=unused-import
有效!但是我相信它会忽略使用的其他导入。我也试过了
from apps.balance.models import (
BLOCKED,
CREDIT,
TRIAL,
TrialAlert # noqa # pylint: disable=unused-import
)
但它也没有奏效。谁能告诉我如何忽略只是最后一次导入?
【问题讨论】:
-
由于解释器/语法的工作方式,我认为这是不可能的。您最好的选择可能是将其拆分为 2 个不同的导入:
from apps.balance.models import BLOCKED, CREDIT, TRIAL ; from apps.balance.models import TrialAlert # noqa # pylint: disable=unused-import,不幸的是违反了 DYI。 -
旁注:PEP8 大约三年前由request of Guido Van Rossum 更名为pycodestyle。
-
我的意思是“不幸地违反了DRY”,当然......
-
您永远不应该从模块中导入单个符号。取而代之的是
from apps.balance import models,然后使用models. BLOCKED等。 -
Kurtis 的说法是见仁见智。 PEP8 对此没有意见。不同的大公司(例如,谷歌)和项目(例如,OpenStack)将其作为一项规则,但允许例外。甚至 Google 的样式指南也允许导入类型注释而不是模块。