28

所以我正在用 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 时,我会收到类似“未使用的导入 - 导入 loggingsetup”的警告,因为我实际上并没有从 loggingsetup 调用任何方法或函数。

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

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

4

8 回答 8

35

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

import loggingsetup # pylint: disable=unused-import

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

于 2012-08-20T10:32:49.697 回答
31

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

import loggingsetup  # noqa # pylint: disable=unused-import
于 2016-04-20T10:46:19.043 回答
15

我将使用的方法是loggingsetup用作logging.

import logging

# set up logging config here

from logging import *

然后在您的其他模块中:

import loggingsetup as logging

您可能想使用loggingsetup本例以外的名称,例如tweaked_loggingor logging_with_my_settings

于 2012-08-14T17:21:48.837 回答
4

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

于 2012-08-14T17:25:19.367 回答
4

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

如果你担心调用这个函数两次,你当然可以使用模块实习生标志来允许函数体只执行一次。

__initialized = False

def init():
    if not __initialized:
        __initialized = True
        #DoStuff
于 2012-08-14T17:25:25.887 回答
1

你也可以

assert loggingsetup

把短绒从你的背上取下来

于 2021-08-10T07:58:25.893 回答
1

我的导入路径很长,由于行大小的限制,它跨越了多行。我必须确保# noqa在导入的第一行而不是最后一行使用它。例如

from this.could.be.a.very.long.path import (  # noqa
some_method,
)
于 2022-01-07T00:45:47.410 回答
0

这是满足警告的方法(vscode + pylint);

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

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

于 2018-12-25T20:41:23.517 回答