このコードスニペットを検討してください。
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
ifステートメントのある行に関する次のメッセージでPylintに警告されました。
[pylint] C1801:
len(SEQUENCE)
条件値として使用しない
ルールC1801は、一見したところ、あまり合理的に聞こえませんでした。リファレンスガイドの定義では、これが問題である理由が説明されていません。実際、それは間違いなくそれを不正使用と呼んでいます。
len-as-condition(C1801): 条件値として使用しない
len(SEQUENCE)
Pylintが条件内でlen(sequence)の誤った使用を検出したときに使用されます。
私の検索の試みも、私にもっと深い説明を提供することに失敗しました。シーケンスの長さプロパティは遅延評価される可能性があり、__len__
副作用を持つようにプログラムできることは理解していますが、それだけでPylintがそのような使用を誤って呼び出すのに十分な問題があるかどうかは疑問です。したがって、ルールを無視するようにプロジェクトを構成する前に、推論に何か欠けているかどうかを知りたいのです。
len(SEQ)
条件値としての使用が問題になるのはいつですか?PylintがC1801で回避しようとしている主な状況は何ですか?
len
それが呼び出されたコンテキストがわからないため、長さの計算がシーケンス全体のトラバースを意味する場合は、それが必要です。結果が単に0と比較されているかどうかはわかりません。ブール値の計算は、シーケンスが実際にどのくらい長いかに関係なく、最初の要素が表示された後に停止する場合があります。ここでは、パイリントは少し意見が分かれていると思います。を使用するのが間違っている状況は考えられませんlen
。代わりの方法よりも悪いオプションであるだけです。
if files:
かif not files: