web-dev-qa-db-ja.com

「未使用のインポート警告」と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を実行すると、「未使用のインポート-インポートloggingsetup」のような警告が表示されるということです。

Loggingsetupの本体を関数として再定義して呼び出すようなこともできますが、それはばかげてエラーが発生しやすいようです(どこかからloggingsetupをインポートし、その方法を理解している場合は、2回呼び出すことを心配する必要があります。 pythonはインポートを処理しますが、現在の設定では問題ありません)。

明らかに警告を無視するようにpylintに指示することもできますが、これが実際に私が別の方法で処理する必要があるものでないことを確認するために、最初にここに尋ねると思いました。

26
Retsam

私が使用するアプローチは、loggingsetuploggingの一種のラッパーとして使用することです。

import logging

# set up logging config here

from logging import *

次に、他のモジュールで:

import loggingsetup as logging

この場合、loggingsetup以外の名前を使用できます。 tweaked_loggingまたはlogging_with_my_settings

11
kindall

そのような場合でも、この未使用のインポートが意図したとおりであることを明示的にpylintに伝えることができます。

import loggingsetup # pylint: disable=unused-import

指示がインポートと同じ行にあるため、W0611はこの行に対してのみ無効になり、以下のすべてのブロックに対しては無効になることに注意してください。

27
sthenault

pylintを使用する場合およびflake8この方法で、両方のツールで未使用のインポート警告を無視できます。

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

あなたのコードはメインスクリプトで一度呼び出された関数にあるべきです

4
Xavier Combelle

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

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

__initialized = False

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

これが警告(vscode + pylint)を満たす方法です。

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

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

0
TABISH