socket.gethostbyname schlägt gelegentlich fehl

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
CoderGirl
User
Beiträge: 74
Registriert: Samstag 22. April 2017, 17:47

Hallo,

ich lese die aktuelle IP für einen meiner Sensoren mittels

Code: Alles auswählen

IP_sensor = socket.gethostbyname ("sensor-76340")
aus.

Meist klappt es auch, aber hin und wieder erhalte ich diese Exception:

Code: Alles auswählen

Traceback (most recent call last):
  File "myipreader.py", line 47, in <module>
    IP_sensor = socket.gethostbyname ("sensor-76340")
socket.gaierror: [Errno 11001] getaddrinfo failed
Wie kann ich da evt. sauber mit umgehen?

Danke

Euer Codergirl
Nur ein Mädchen, das nie so viel weiss, wie die Jungs :ugeek:
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@CoderGirl: ``try``/``except socket.gaierror:``, eventuell ``else``, und dann halt Code der das macht was in den jeweiligen Fällen passieren soll.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
CoderGirl
User
Beiträge: 74
Registriert: Samstag 22. April 2017, 17:47

Hallo

das try-except habe ich scho drin. Problem ist, wenn das except geworfen wird, dann komme ich halt nicht an die IP ;-)
Nur ein Mädchen, das nie so viel weiss, wie die Jungs :ugeek:
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na es hängt davon ab, was du dann tun willst. Soll einfach solange probiert werden, bis es klappt? Dann pack eine while schleife und ggf eine kurze Pause dazu. Oder wenn weiter gemacht werden soll, aber eben zb kein Eintrag in die datenbank oder was auch immer die weiteren Verarbeitungsschritte sind, dann kannst du zb None zurück geben, oder eine Anwendungsspezifische Ausnahme erzeugen und weiter “oben” im Code darauf reagieren.
Benutzeravatar
CoderGirl
User
Beiträge: 74
Registriert: Samstag 22. April 2017, 17:47

Hallo, Ok dann überlege ich mir einfach einen WorkAround. Dachte, es gäbe da einen altrnativen Aufruf etc. Aber ich bekomme das hin :)
Nur ein Mädchen, das nie so viel weiss, wie die Jungs :ugeek:
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Die Exception tritt ja nicht grundlos auf. Sie tritt auf, weil irgend etwas nicht gestimmt hat. Die Adresse konnte nicht ermittelt werden, weil der Hostname im Netzwerk nicht gefunden wurde. Warum auch immer. Und auf diese Exception musst du reagieren.
Es kann auch keinen Workaround oder einen alternativen Aufruf. Das System findet den Host nicht. Der taucht aber nicht im Netzt auf, nur weil man es auf eine andere Art und Weise versucht.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und es gibt dann ja auch immer noch die zwei Möglichkeiten das man den Host falsch geschrieben hat, oder er tatsächlich dauerhaft nicht im Netz existiert. Die sollte man auch bedenken und das Programm so schreiben, dass es auch in diesen Fällen sinnvoll reagiert.

Und testen. Solche Fälle sollte man am besten auch alle mal testen. Am besten automatisiert → Unit-Tests.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
CoderGirl
User
Beiträge: 74
Registriert: Samstag 22. April 2017, 17:47

Dank euch. Ich habe es für mich zufriedenstellend gelöst
Nur ein Mädchen, das nie so viel weiss, wie die Jungs :ugeek:
Antworten