Denke bitte daran, dass man diese ganze Fehlerbehandlung sparsam einsetzen sollte. Im Grunde lernt man als Programmierer, dass man es nur in kleinen Bereichen nutzt, an welchen potentiell Fehler auftreten können die durch saubere Programmierung nicht vermieden werden können. Aber dann auch zielgerichtet
Ich glaube da muss ich etwas mehr zur Anwendung sagen.
Der PI wird einmal gestartet und erfüllt mehrere Dienste (Sensoren, GSM etc. und macht Daten uploads, etc. siehe Threads)
Wenn jedoch einer der Sensoren ausfällt oder fehlerhafte werte liefert etc. soll einfach 1 wert ins leere laufen. da bei der nächsten Abfrage idr. wieder ein richtiger wert auftritt. Auch muss sichergestellt sein das alles andere weiterläuft.
Das ganze wird einmal gestartet und am besten erst nach 6 Monaten wieder abgeschaltet. deswegen ist es für mich sehr wichtig jede erdenkliche Fehlerquelle auszuschließen / zu behandeln. denn wenn etwas unerwartetes passiert bleibt das Programm stehen.
Beispiel zu meiner Vorgehensweise.
angenommen ich gehe über try explicit und benenne einen Division 0 Fehler da dieser der einzige zu erwartende ist.
Nun bekommt einer der Sensoren aber eine falsche Information (externer Einfluss oder spinnt einfach) sodass ein type error entsteht der nicht als ausnähme definiert ist. dann Crash es...
da meine zu verarbeitenden Daten absolut eindeutig in stringlänge werte Bereich usw. sind. erschien es mir einfacher und zuverlässiger diese auf Stimmigkeit zu prüfen und den folgenden code so zu schreiben, das kein Fehler auftritt wenn die Daten stimmen.
Die chance das ich eine Fehlermeldung vergesse oder sich neue ergeben weil bpw. ein GSM Rückgabewert sich leicht verändert und die liste nicht mehr 6 oder 7 Inhalte hat, oder oder oder, erschien mir deutlich höher als ein einfaches. "passt der wert? ja? dann los! Nein? Hey hier stimmt was nicht!"
zudem ich ja sowieso nur fehlerfreie Daten ansammeln möchte. also eine Prüfung ob der ermittelte Wert denn Sinn ergibt wäre sowieso angebracht.
Also ja, Try and explicit ginge, wäre aber aus meiner Sicht fehleranfälliger. als ein kleiner if block hier ein Beispiel:
def Sensorschleife(Delay):
while true
daten = Funktion_Sensoraufruf()
if daten = error:
print Fehler xy
time.sleep(delay)
return error
Ablauf...
return Ergebnis
time.sleep(delay)
T_Sensorschreife = threading...
.
.
.
if start Bedingung zur Initialisierung
T_Sensorschleife.start()
ich werde trotzdem die Startbedingungen bzw. Initialisierungen in try und Explicits packen das ist denke ich wie von euch beschrieben der saubere weg.
vor allem um eben Schreibvorgänge zu beenden und den pi sauber zu erboten falls was kommt.
Man lernt nie aus! 