Python中表明未使用的模块导入是有意的惯用方式

7
有时候,一个看似未被使用的 Python 模块导入实际上是程序正常运行所必需的。看起来没有使用到的导入会引起像 PyFlakes 这样的工具产生虚假的消息,并且可能吸引过于热心的程序员的注意。例如,C++ 有一个(自 C++ 11 以来)习惯用法来表明这一点,即使用 [[unused]] 属性(C++ 17 引入了 [[maybe_unused]])。
我特别在 Flask 等 Web 框架的上下文中提出这个问题,因为这种情况经常发生。例如,下面这段来自 Flask 应用程序的样板代码是其正常运行所必需的:
from app import auth_routes, app, db
from app.resources import api

我通常通过

来处理这种情况。
import X
assert X is not None # Explanatory comment

有没有更加明确意图且更符合Python风格的方法来实现这个?

你能给一个具体的例子吗? - hek2mgl
例如这段 Flask 样板代码: from app import auth_routes, app, db from app.resources import api - Isac Casapu
3
因此,由于这些导入在文件中没有被使用,但仍然是必需的,所以问题似乎是你正在使用的库“不够Pythonic”。也就是说,导入模块具有隐藏的副作用。我认为这违反了“明确优于隐含”的原则。另一方面,也有人说,“实用性胜于纯粹性”。 - Håken Lid
1个回答

9
每个工具都有自己的错误抑制方式。例如:
Pylint:
import X  # pylint: disable=unused-import

Pyflakes:

import X  # NOQA

PyCharm:

# noinspection PyUnresolvedReferences
import X

我认为这种方法不够扩展,因为市面上有很多代码检查工具。 - Isac Casapu
2
如果有至少一个指令被每个 linting 工具所尊重,那就太好了。例如 # NOQA。即使你只使用一个 linter,也很难弄清在任何给定情况下使用哪个特定的指令。 - Håken Lid
@HåkenLid 我也很想看到那个。 - Sagar Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接