python-sys.argv[1] vs. sys.argv[1:]
Schrieb ich diesen code:
#!/usr/bin/env python
import sys
if sys.argv[1] :
print sys.argv[1]
Versuchen, diese in der Konsole, wenn eingegeben:
$ python py.py xxx
druckt xxx
Wenn ich lassen Sie es ohne parameter, wird eine Fehlermeldung angezeigt:
Traceback (most recent call last): File "py.py", line 4, in
wenn sys.argv[1] : IndexError: list index out of range
Nun mit ein paar änderungen:
#!/usr/bin/env python
import sys
if sys.argv[1:] :
print sys.argv[1:]
Sehen Sie, ich änderte [1] [1:] und nun, wenn ich geben Sie "$ python py.py " in der Konsole und vergessen Sie den parameter, der gibt keine Fehler.
Was passiert hinter den kulissen?
- Verwenden Sie den len-Funktion in der if-Anweisung
if len(sys.argv) > 1:
- Ich denke
if sys.argv[1:]:
ist sehr fein, und danach können Sie sicher sein, dasssys.argv[1]
vorhanden und können genutzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sys.argv
ist eine Liste von Argumenten.Also, wenn Sie führen Sie Ihr Skript ohne Argumente in dieser Liste, die Sie Zugriff auf index 1 der leer ist und den Zugriff auf einen index eine leere Liste wirft eine
IndexError
.Mit Ihrem zweiten code-block, du machst eine Liste slice und du bist zu überprüfen, ob die Liste der slice vom index 1, und nach vorn ist nicht leer dann drucken Sie Ihr, dass slice der Liste.
Warum dies funktioniert, ist, weil, wenn Sie eine leere Liste und eine Scheibe auf, wie diese, die Scheibe gibt eine leere Liste zurück.
sys.argv ist eine Liste von Argumenten (die Sie übergeben, zusammen mit dem Befehl im terminal), aber wenn Sie nicht übergeben, Argumente und Zugriff auf den index 1, der die leere Liste gibt es einen offensichtlichen Fehler (IndexError).
aber, im zweiten Fall, wo Sie tun schneiden von index 1 und mit den Mitgliedern der Liste mit index - >1 es sollte kein problem sein, selbst wenn die Liste leer ist, da dann die in Scheiben geschnittenen Liste auch leer sein und wir bekommen kein Fehler.