私はいくつかのかなりcruftyコードをリファクタリングして、次の奇妙構造に出くわしてきた:(FOOまたはバーやバズ)がある場合なし:
#!/usr/bin/env python2.7
# ...
if (opts.foo or opts.bar or opts.baz) is None:
# (actual option names changed to protect the guilty)
sys.stderr.write("Some error messages that these are required arguments")
...と、これは今までならば、私は思っていました考えられる感覚を作る。
私のような何かにそれを変更:唯一の値は、すべての最後の偽とであれば動作しているようです...私は通訳を起動し、実際には最初の構造をしてみてくださいでした
#!/usr/bin/env python2.7
if None in (opts.foo, opts.bar, opts.baz):
# ...
これらの偽の値はNoneです。 (つまり、CPythonの実装は、またはの式のチェーンから最初の真偽または最後の偽の値を返すようです。
私はまだ適切なコードは2.5を追加された任意の()またはすべて()組み込み関数(問題のコードはすでに2.7が必要です)のいずれかを使用する必要があると思われます。私はこのプロジェクトをちょうど始めているので、どちらが望ましい/意図されたセマンティクスであるかまだ分かりません。
この元のコードが意味をなさない場合はありますか?
:
あなたの第一の条件は、あなたのすべての変数はいずれも
されていないときに、あなたがあなたの最初の条件を書き換えることができますTrueを返します。これを修正して新しいバグを導入しないように注意してください:) –