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に指示することもできますが、これが実際に私が別の方法で処理する必要があるものでないことを確認するために、最初にここに尋ねると思いました。
私が使用するアプローチは、loggingsetup
をlogging
の一種のラッパーとして使用することです。
import logging
# set up logging config here
from logging import *
次に、他のモジュールで:
import loggingsetup as logging
この場合、loggingsetup
以外の名前を使用できます。 tweaked_logging
またはlogging_with_my_settings
。
そのような場合でも、この未使用のインポートが意図したとおりであることを明示的にpylintに伝えることができます。
import loggingsetup # pylint: disable=unused-import
指示がインポートと同じ行にあるため、W0611はこの行に対してのみ無効になり、以下のすべてのブロックに対しては無効になることに注意してください。
pylint
を使用する場合およびflake8
この方法で、両方のツールで未使用のインポート警告を無視できます。
import loggingsetup # noqa # pylint: disable=unused-import
あなたのコードはメインスクリプトで一度呼び出された関数にあるべきです
あなたが自分でそれを関数にラップし、セットアップを明示的に呼び出すと、この警告が解決されます。そしてスティーブンが述べたように、これはあなたが何をしているかについてより明確であるため、より良いコードと考えられます。
この関数を2回呼び出すことを心配する場合は、モジュールのインターンフラグを使用して、関数本体を1回だけ実行できるようにすることもできます。
__initialized = False
def init():
if not __initialized:
__initialized = True
#DoStuff
これが警告(vscode + pylint)を満たす方法です。
from array import array
ar = array('i', [])
したがって、ワイルドカードを使用する代わりに、「配列」メソッドを再度指定しました。