Python script sys index out of Range?

3 Antworten

Geht jetzt nicht direkt ums Thema aber..

ich hätte ich den Code noch einiges verkürzt um ein wenig Übersichtlichkeit zu schaffen:

alle Konstanten in eine Reihe,

das zweite print weg und eine neue Zeile mit eine Escape Sequenz machen "\n" ansonsten so:

 f"""
Ich bin ein Text:
{IP}
{sys.argv}

Hier sparst du dir die Escape Sequenzen sofern du im Editor auch immer eine Zeile nach unten gehst.

"""

die imports in eine Reihe

sys.argv brauchst du eigentlich nicht extra in eine neue variable legen.

Und weil ich piki und Deutsch bin du hast "Phyton" geschrieben im ersten Bild auf dem ersten Task beim Ordner ist es sichtbar xD

Woher ich das weiß:eigene Erfahrung

sys.argv gibt dir die argumente die im terminal gegeben wurden.

diese fehlen bei dir.


Infensis 
Beitragsersteller
 18.05.2022, 16:01

Da habe ich eine IP Adresse als Argument als String

0
Infensis 
Beitragsersteller
 18.05.2022, 16:01

die gebe ich eigentlich per Node Red(Siehe Bilder)

0

List Index out of range bedeutet das der Platz in einer Liste nicht erreichbar ist.

Dementsprechend falls der User keine oder unzureichende Argumente angibt:

import sys
maxnr = 2
try:
    for nr, i in enumerate(sys.argv):
      chk = i #0 Ist IMMER der Dateipfad und Name
      if nr == maxnr:
        break
except:
    print("Unzureichende Argumente!")
    sys.exit()
Woher ich das weiß:eigene Erfahrung

Infensis 
Beitragsersteller
 19.05.2022, 10:29

Okay, also das einfach in meinen Code mit einbinden oder wie?

1
Justus393  19.05.2022, 10:30
@Infensis

Kannst du eigentlich so machen.

Allerdings würde ich auch noch prüfen ob die Argumente die der User angibt überhaupt okay sind.

0
regex9  19.05.2022, 23:02
@Infensis

Das wird dein Kernproblem (fehlende IP) nicht beheben, denn darauf geht die Antwort nicht ein. Der Code oben iteriert lediglich über die verfügbaren Argumente, während du manuell auf sie zugreifst (was für deinen Fall auch die kürzere Methode ist). Das try-except ist unnötig, denn ein Fehlerfall wird nicht ausgelöst. Dazu müsste sys.argv erst auf einen Wert wie None verweisen.

Wenn du eine Sicherheitsabfrage einbauen möchtest, reicht eine einfache Verzweigung:

if len(sys.argv) < 2:
  print("Ip not given!")
  sys.exit()

ip = sys.argv[1]
0
Justus393  20.05.2022, 09:47
@regex9

Stimmt das wäre kürzer. Nicht dran gedacht gestern xD

0