Python &引用;“未使用的进口警告”;和派林

Python &引用;“未使用的进口警告”;和派林,python,warnings,pylint,Python,Warnings,Pylint,因此,我正在用Python进行一个项目,并试图通过pylint使其达到标准。因此,我有一个源文件(我们将其称为a.py) 但是,我想控制日志记录的外观,因此在loggingsetup中,我有如下内容: #loggingsetup.py import logging logging.root.setLevel(logging.DEBUG) consoleOut = logging.StreamHandler() consoleOut.setLevel(logging.INFO) conso

因此,我正在用Python进行一个项目,并试图通过pylint使其达到标准。因此,我有一个源文件(我们将其称为a.py)

但是,我想控制日志记录的外观,因此在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时,会收到一个类似“unused import-import loggingsetup”的警告,因为我实际上并没有从loggingsetup调用任何方法或函数

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


很明显,我可以让派林忽略这个警告,但我想我应该先问一下,以确保这不是我应该以不同方式处理的事情

我将使用的方法是使用
loggingsetup
作为
日志记录的包装

import logging

# set up logging config here

from logging import *
然后在其他模块中:

import loggingsetup as logging

在本例中,您可能希望使用除
loggingsetup
以外的名称,例如,
tweated_logging
logging_with_my_settings

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

,正如您提到的,将其包装在函数中并显式调用安装程序可以解决此警告。正如Steven提到的,这将被认为是更好的代码,因为它更明确地说明了您正在做什么

如果您担心调用此函数两次,当然可以使用module intern标志只允许执行函数体一次

__initialized = False

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

在这种情况下,您仍然可以显式地告诉pylint,此未使用的导入将用于:

import loggingsetup # pylint: disable=unused-import

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

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

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

以下是如何满足警告(vscode+pylint)


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

仅因副作用而导入模块对我来说是错误的。这使得代码的意图更难识别。显式比隐式好。这只是一个警告,你可能忘记了一些事情和/或做了一些不必要的事情。如果不是这样的话,请忽略它。我有点不同意马蒂诺的上述观点。是的,有时候就是这样,你必须忽略警告,但通常警告不应该被视为“友好的提醒”,并且在没有确定的情况下被忽略,这就是为什么我来确定我可以忽略它,或者得到一个更好的方法。对,这会起作用,但我忍不住觉得这是一种牺牲“简单总比复杂好“这样做。它不会包装脚本的主体,但我还必须记住向任何导入添加函数调用。不可怕,但不是那么简单。在某些情况下,这将是一个好的选择,但在这种情况下,我认为kindall的答案是更好的。从我最初警告的角度来看,这是可行的,我肯定喜欢这个想法。现在我让pylint抱怨通配符导入,以及loggingsetup.py中所有未使用的导入(尽管我接受了您的建议并将其重命名),我没有尝试过这样做,但是将
#pylint:disable msg cat=
注释放在包装器模块的顶部可以让您仅抑制该模块中指定类别的警告。至少您已经将所有“不好”都隔离到一个模块中。:-)似乎在“第二条注释”的开头需要两个空格:`#noqa#pylint:disable=unused import`
import loggingsetup  # noqa # pylint: disable=unused-import
from array import array
ar = array('i', [])