142 votes

Vérification de la définition de sys.argv[x]

Quelle serait la meilleure façon de vérifier si une variable a été transmise pour le script :

try:
    sys.argv[1]
except NameError:
    startingpoint = 'blah'
else:
    startingpoint = sys.argv[1]

160voto

David Wolever Points 34304

Vérifiez la longueur de sys.argv :

if len(sys.argv) > 1:
    blah = sys.argv[1]
else:
    blah = 'blah'

Certaines personnes préfèrent l'approche basée sur les exceptions que vous avez suggérée (par exemple, try: blah = sys.argv[1]; except IndexError: blah = 'blah'), mais je ne l'aime pas autant parce qu'elle n'est pas « à l'échelle » presque aussi bien (par exemple, lorsque vous voulez accepter deux ou trois arguments) et qu'elle peut potentiellement masquer des erreurs (par exemple, si vous avez utilisé blah = foo(sys.argv[1]) foo(...) IndexError IndexError serait ignoré).

28voto

jathanism Points 15208

Une autre façon dont je n'ai pas encore vu la liste est de définir votre valeur sentinelle à l'avance. Cette méthode profite de l'évaluation paresseuse de Python, dans laquelle vous n'avez pas toujours à fournir une déclaration else. Exemple :

startingpoint = 'blah'
if len(sys.argv) >= 2:
  startingpoint = sys.argv[1]

Ou si vous devenez FOU de syntaxe, vous pouvez utiliser l'opérateur ternaire de Python :

startingpoint = sys.argv[1] if len(sys.argv) >= 2 else 'blah'

19voto

techtonik Points 2945

J'utilise ceci - il n'échoue jamais :

startingpoint = 'blah'
if sys.argv[1:]:
   startingpoint = sys.argv[1]

10voto

Richard Barrell Points 1952

C'est une liste Python ordinaire. L'exception que vous pourriez attraper pour cela est IndexError, mais vous feriez mieux de simplement vérifier la longueur à la place.

if len(sys.argv) >= 2:
  startingpoint = sys.argv[1]
else:
  startingpoint = 'blah'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X