Überprüfen, ob sys.argv [x] definiert ist
Was wäre der beste Weg, um zu überprüfen, ob eine variable übergeben wurde, zusammen für das Skript:
try:
sys.argv[1]
except NameError:
startingpoint = 'blah'
else:
startingpoint = sys.argv[1]
InformationsquelleAutor der Frage Cmag | 2011-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Ende, der Unterschied zwischen
try, except
und testenlen(sys.argv)
ist nicht signifikant. Sie sind beide ein bisschen hackish im Vergleich zuargparse
.Dies geschieht, um mich, obwohl -- als eine Art low-budget-argparse:
Könnte man es sogar benutzen, erzeugen Sie ein
namedtuple
mit Werten, die standardmäßig zuNone
- alle in vier Zeilen!Im Falle Sie nicht vertraut sind mit
namedtuple
es ist nur ein Tupel, das wirkt wie ein Objekt, so dass Sie Zugriff auf Ihre Werte mithilfetup.attribute
syntax statttup[0]
syntax.Also die erste Zeile erzeugt eine neue
namedtuple
geben Sie Werte für jeden der Werte inarg_names
. Die zweite Zeile übergibt die Werte aus derargs
Wörterbuch, mitget
Rückgabe eines default-Wert, wenn das gegebene argument name nicht zugeordneten Wert in das dictionary.InformationsquelleAutor der Antwort senderle
Überprüfen Sie die Länge der
sys.argv
:Einige Leute bevorzugen die Ausnahme-basierte Ansatz, den Sie vorgeschlagen habe (zB
try: blah = sys.argv[1]; except IndexError: blah = 'blah'
), aber ich mag es nicht so sehr, weil es nicht "scale" ist fast so schön (zB, wenn Sie wollen, zu akzeptieren, zwei oder drei Argumente), und es kann möglicherweise zu verbergen Fehler (zum Beispiel, wenn Sie verwendet werdenblah = foo(sys.argv[1])
aberfoo(...)
hob eineIndexError
dassIndexError
würde ignoriert).InformationsquelleAutor der Antwort David Wolever
Einen anderen Weg habe ich nicht gesehen, gelistet ist legen Sie Ihre sentinel-Wert vor der Zeit. Diese Methode nutzt Python ' s lazy evaluation, in die Sie nicht immer haben, um eine
else
- Anweisung. Beispiel:Oder wenn du gehst, syntax VERRÜCKT, Sie könnte verwenden Python ' s ternärer operator:
InformationsquelleAutor der Antwort jathanism
Es ist eine normale Python-Liste. Die Ausnahme, die Sie fangen würde, für diese ist IndexError, aber du bist besser dran, nur die überprüfung der Länge statt.
InformationsquelleAutor der Antwort Richard Barrell
Ich diese - es ist nie fehl:
InformationsquelleAutor der Antwort anatoly techtonik
Können Sie einfach fügen Sie den Wert von argv[1] argv und prüfen Sie dann, ob argv[1] entspricht nicht der Zeichenfolge, die Sie eingegeben Beispiel:
InformationsquelleAutor der Antwort Hassan Abdul-Kareem
Ziemlich nahe an dem, was der Urheber war, zu tun versuchen. Hier ist eine Funktion, die ich verwenden:
So einen Einsatz wäre so etwas wie:
InformationsquelleAutor der Antwort J. Barber
Einer Lösung arbeiten, mit Karte, built-in Funktion !
Dann haben Sie nur rufen Sie Ihren Parametern:
InformationsquelleAutor der Antwort Guillaume Hillion