2017-01-03 1 views
1

J'essaie de comprendre la première partie de la prochaine validation. Puis-je supposer que l'expression 'if not set (sys.argv)' est toujours False? Le code provient du Ironic Project.Pourquoi la validation 'if not set (sys.argv)' serait-elle nécessaire?

if not set(sys.argv) & valid_commands: 

Selon le docs, si la commande est exécutée avec l'option '-c', argv [0] est réglé sur la chaîne '-c'. Ce qui est encore un ensemble non-vide. Exemple:

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

Non, vous ne pouvez pas supposer sans risque que l'expression 'si pas défini (sys.argv)' est toujours faux. Votre programme a peut-être déjà effacé 'sys.argv'. –

+1

'sys.argv' peut également être vide si vous appelez votre script en utilisant l'API C Python. –

Répondre

4

Vous avez lu le contraire. Le not de Python a une très faible priorité, en dessous de & (ce qui n'est pas logique).

if not set(sys.argv) & valid_commands: 

doit être lu comme

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

qui teste si sys.argv contient des éléments de l'ensemble valid_commands.

2

Il n'y a pas de "première partie" ici. Le

if not set(sys.argv) & valid_commands: 

est équivalent à

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