“未使用的导入警告”和pylint

时间:2012-08-14 16:51:09

标签: python warnings pylint

所以我正在研究Python中的一个项目,并试图通过pylint来保持它的标准。所以,我有一个源文件,(我们只称它为a.py)

#a.py
import loggingsetup

def foo():
   log.info("This is a log message")

但是,我想控制日志记录的样子,所以在loggingsetup中我有类似的东西:

#loggingsetup.py
import logging

logging.root.setLevel(logging.DEBUG)

consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)  
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)

#etc

现在,这似乎工作正常。我想作为一个初步的问题,我应该问这是否是正确的方法,或者是否有一种不同的方法来构建我的代码,这是更好的。

但是我的主要问题是,当我在a.py上运行pylint时,我会收到类似“未使用的import - import loggingsetup”的警告,因为我实际上并没有从loggingsetup调用任何方法或函数。

我可以做一些事情,比如重新定义loggingsetup的主体作为一个函数并调用它,但它看起来很愚蠢且容易出错(如果我从其他地方导入loggingsetup,我必须担心调用它两次,如果我理解python如何处理导入,这不是我当前设置的问题)。

我显然可以告诉pylint忽略警告,但我想我先问这里确保这实际上不是我应该处理的事情。

7 个答案:

答案 0 :(得分:27)

在这种情况下,您仍然可以明确告诉pylint这个未使用的导入:

import loggingsetup # pylint: disable=unused-import

请注意,该指令与导入位于同一行,因此W0611仅对此行禁用,而不是对以下所有块禁用。

答案 1 :(得分:13)

如果您使用pylint flake8,您可以通过以下方式忽略这两个工具中未使用的导入警告:

import loggingsetup  # noqa # pylint: disable=unused-import

答案 2 :(得分:11)

我将使用的方法是使用loggingsetup作为logging的一种包装。

import logging

# set up logging config here

from logging import *

然后在你的其他模块中:

import loggingsetup as logging

在这种情况下,您可能希望使用loggingsetup以外的名称,例如tweaked_logginglogging_with_my_settings

答案 3 :(得分:4)

您的代码应该在主脚本中调用一次的函数

答案 4 :(得分:4)

正如您所提到的那样,将自己包装在函数中并明确调用设置将解决此警告。正如史蒂文所提到的,这将被认为是更好的代码,因为它更清楚你正在做什么。

如果您担心两次调用此函数,您当然可以使用模块内部标志来仅允许执行一次函数体。

__initialized = False

def init():
    if not __initialized:
        __initialized = True
        #DoStuff

答案 5 :(得分:1)

你也可以

assert loggingsetup

让你摆脱掉绒毛

答案 6 :(得分:0)

这是您如何满足警告要求(vscode + pylint);

from array import array
ar = array('i', [])

因此,不要使用通配符,而是再次指定“数组”方法。