2017-01-03 14 views
1

私は次の検証の最初の部分を理解しようとしています。 'もし設定されていなければ(sys.argv)'という表現が常にFalseであると私は安全に仮定できますか?コードはIronic Projectです。 docsによると検証が '設定されていない場合(sys.argv)'が必要なのはなぜですか?

if not set(sys.argv) & valid_commands: 

、コマンドが '-c' オプションで実行されている場合は、argvは、[0] '-c' という文字列に設定されています。まだ空ではないセットです。例:

python -c ' 
import sys 
print(sys.argv[0]) 
if not set(sys.argv): 
    print("empty") 
else: 
    print("non-empty") 
' 
+2

と同等ですいいえ、あなたは安全に(sys.argvのを)設定されていない場合は式は、 ''常に偽であると仮定することはできません。あなたのプログラムは以前に 'sys.argv'をクリアしている可能性があります。 –

+1

Python C APIを使ってスクリプトを呼び出すと 'sys.argv'も空になることがあります。 –

答えて

4

これは間違っています。 Pythonのnotは、優先度が非常に低く、&(論理ANDではありません)より下です。

if not set(sys.argv) & valid_commands: 

sys.argvがセットvalid_commandsの任意の要素を含んでいるかどうかをテストしている

if not (set(sys.argv) & valid_commands): 

として読まれるべきです。

2

「最初の部分」はありません。

if not set(sys.argv) & valid_commands: 

if not (set(sys.argv) & valid_commands): 
関連する問題