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から実際にメソッドや関数を呼び出していないため、「unused import--importloggingsetup」のような警告が表示されることです。

loggingsetupの本体を関数として再定義して呼び出すようなこともできますが、それはばかげてエラーが発生しやすいようです(loggingsetupを別の場所からインポートした場合、およびその方法を理解している場合は、2回呼び出すことを心配する必要があります。 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_loggingまたはを使用することもできlogging_with_my_settingsます。

于 2012-08-14T17:21:48.837 に答える
4

コードは、メインスクリプトで1回呼び出される関数に含まれている必要があります

于 2012-08-14T17:25:19.367 に答える
4

あなたがあなた自身がそれを関数でラップしてセットアップを明示的に呼び出すとあなたが言ったように、この警告を解決するでしょう。そして、スティーブンが述べたように、これはあなたがしていることについてより明確であるため、より良いコードと見なされます。

この関数を2回呼び出すことを心配している場合は、もちろん、モジュールインターンフラグを使用して、関数本体の実行を1回だけ許可することができます。

__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', [])

したがって、ワイルドカードを使用する代わりに、「array」メソッドを再度指定します。

于 2018-12-25T20:41:23.517 に答える