1. ホーム
  2. パイソン

[解決済み】PyLintメッセージ:logging-format-interpolation

2022-04-18 07:45:48

質問

以下のコードについて。

logger.debug('message: {}'.format('test'))

pylint は次のような警告を出します。

logging-format-interpolation (W1202)を参照してください。

ロギング関数で % フォーマットを使用し、% パラメータを 引数 ロギングステートメントが以下の呼び出し形式を持つ場合に使用されます。 "logging.(format_string.format(format_args...))" とします。このような の呼び出しは、代わりに % フォーマットを使用する必要がありますが、補間を行うのは パラメータを引数として渡すことで、ロギング関数を使用することができます。

この警告を消せることは知っていますが、理解したいのです。私は format() は、Python 3 でステートメントをプリントアウトするための好ましい方法です。なぜロガーステートメントには当てはまらないのでしょうか?

どのように解決するのですか?

loggerステートメントは、文字列のような以前の "%" フォーマットに依存し、loggerコールに与えられた追加の引数を使用してこの文字列の遅延補間を提供するため、それは真実ではありません。たとえば、次のようにします。

logger.error('oops caused by %s' % exc)

する必要があります

logger.error('oops caused by %s', exc)

のように、実際にメッセージが発せられた場合にのみ、文字列が補間されるようにします。

を使用する場合、この機能の恩恵を受けることはできません。 .format() .


につきまして 最適化 セクションの logging のドキュメントを参照してください。

メッセージの引数の書式設定は、避けられなくなるまで延期されます。しかし、ロギングメソッドに渡される引数を計算するのもコストがかかるので、 ロガーがイベントを捨ててしまうような場合は、それを避けたほうがよいでしょう。