web-dev-qa-db-ja.com

PyLintメッセージ:logging-format-interpolation

次のコードの場合:

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

pylintは、次の警告を生成します。

ロギングフォーマットの補間(W1202):

ロギング関数で%フォーマットを使用し、%パラメーターを引数として渡します。ロギングステートメントの呼び出し形式が「logging。(format_string.format(format_args ...))」の場合に使用します。そのような呼び出しでは、代わりに%書式設定を使用する必要がありますが、引数を引数として渡すことにより、ロギング関数に補間を残します。

この警告をオフにできることは知っていますが、理解したいと思います。 format()を使用することは、Python 3でステートメントを印刷するための好ましい方法であると想定しました。

111
pfnuesel

ロガーステートメントには当てはまりません。これは、ロガー呼び出しに指定された追加の引数を使用して、この文字列の遅延補間を提供するstringのような以前の「%」形式に依存するためです。たとえば、代わりに:

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

やったほうがいい

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

そのため、文字列は、メッセージが実際に送信された場合にのみ補間されます。

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


loggingドキュメントの 最適化 セクションごと:

メッセージ引数のフォーマットは、避けられなくなるまで延期されます。ただし、ロギングメソッドに渡される引数の計算も負荷が高くなる可能性があるため、ロガーがイベントを破棄するだけの場合は、それを避けることができます。

146
sthenault