Error Handling #24

Open
opened 2026-03-23 13:14:45 +01:00 by daniel · 1 comment
Owner

Ein paar Stellen im code haben kein Richtiges Error Handling. Muss unbedingt gemacht werden! Inkl. Log ins Log System.

Ein paar Stellen im code haben kein Richtiges Error Handling. Muss unbedingt gemacht werden! Inkl. Log ins Log System.
Author
Owner

Beispielcode:
`
import traceback

try:
# Wieder unser Standard-Fehler
ergebnis = 10 / 0

except Exception as e:
# 1. Den rohen "Diagnosepuffer" aus dem Fehler auslesen
roh_daten = e.traceback

# 2. Die Daten mit traceback in eine durchsuchbare Liste übersetzen
aufruf_liste = traceback.extract_tb(roh_daten)

# 3. Den allerletzten Eintrag der Liste nehmen
# In Python bedeutet [-1] immer "das letzte Element einer Liste"
fehler_ort = aufruf_liste[-1]

# 4. Jetzt können wir die Werte ganz sauber als einzelne Variablen abgreifen
script_name = fehler_ort.filename
zeile = fehler_ort.lineno
fehler_grund = str(e)

# 5. Zum Testen geben wir sie einzeln aus 
# (Hier würdest du sie in deine Datenbank-Spalten schreiben)
print("Script:", script_name)
print("Zeile:", zeile)
print("Grund:", fehler_grund)`

e.traceback: Die Variable e (unser aufgefangener Fehler) hat versteckte Eigenschaften. Alles, was in Python mit zwei Unterstrichen davor und danach geschrieben wird (sogenannte "Dunder"-Methoden/Eigenschaften), sind interne Systemvariablen. Hier liegt der rohe Speicherabzug des Absturzes.

traceback.extract_tb(...): Diese Funktion nimmt die rohen Systemdaten und macht daraus eine übersichtliche Liste mit allen Stationen, die das Programm durchlaufen hat
1
.

Warum aufruf_liste[-1]?
Stell dir vor, dein Hauptprogramm (OB1) ruft ein Unterprogramm auf (FC1), und dieses ruft einen Motorbaustein auf (FB10). Der Fehler passiert im FB10.
Die aufruf_liste enthält dann den ganzen Weg: [OB1, FC1, FB10]. Da wir genau wissen wollen, wo es geknallt hat, brauchen wir den allerletzten Eintrag der Liste
1
. In Python greift man mit der Position [-1] ganz elegant immer auf das exakt letzte Element einer Liste zu (egal wie lang sie ist)
1
.

.filename und .lineno: Das sind jetzt die fertigen, sauberen Variablen
1
. script_name ist jetzt ein reiner Text (String) wie "C:/programme/mein_script.py" und zeile ist ein waschechter Integer (Zahlenwert) wie 14. Perfekt, um sie einzeln an einen SQL-Query für deine Logger-Datenbank zu übergeben.

kopiert von ner AI. Als Notiz wie und was (ungefähr...)

Beispielcode: ` import traceback try: # Wieder unser Standard-Fehler ergebnis = 10 / 0 except Exception as e: # 1. Den rohen "Diagnosepuffer" aus dem Fehler auslesen roh_daten = e.__traceback__ # 2. Die Daten mit traceback in eine durchsuchbare Liste übersetzen aufruf_liste = traceback.extract_tb(roh_daten) # 3. Den allerletzten Eintrag der Liste nehmen # In Python bedeutet [-1] immer "das letzte Element einer Liste" fehler_ort = aufruf_liste[-1] # 4. Jetzt können wir die Werte ganz sauber als einzelne Variablen abgreifen script_name = fehler_ort.filename zeile = fehler_ort.lineno fehler_grund = str(e) # 5. Zum Testen geben wir sie einzeln aus # (Hier würdest du sie in deine Datenbank-Spalten schreiben) print("Script:", script_name) print("Zeile:", zeile) print("Grund:", fehler_grund)` e.__traceback__: Die Variable e (unser aufgefangener Fehler) hat versteckte Eigenschaften. Alles, was in Python mit zwei Unterstrichen davor und danach geschrieben wird (sogenannte "Dunder"-Methoden/Eigenschaften), sind interne Systemvariablen. Hier liegt der rohe Speicherabzug des Absturzes. traceback.extract_tb(...): Diese Funktion nimmt die rohen Systemdaten und macht daraus eine übersichtliche Liste mit allen Stationen, die das Programm durchlaufen hat 1 . Warum aufruf_liste[-1]? Stell dir vor, dein Hauptprogramm (OB1) ruft ein Unterprogramm auf (FC1), und dieses ruft einen Motorbaustein auf (FB10). Der Fehler passiert im FB10. Die aufruf_liste enthält dann den ganzen Weg: [OB1, FC1, FB10]. Da wir genau wissen wollen, wo es geknallt hat, brauchen wir den allerletzten Eintrag der Liste 1 . In Python greift man mit der Position [-1] ganz elegant immer auf das exakt letzte Element einer Liste zu (egal wie lang sie ist) 1 . .filename und .lineno: Das sind jetzt die fertigen, sauberen Variablen 1 . script_name ist jetzt ein reiner Text (String) wie "C:/programme/mein_script.py" und zeile ist ein waschechter Integer (Zahlenwert) wie 14. Perfekt, um sie einzeln an einen SQL-Query für deine Logger-Datenbank zu übergeben. kopiert von ner AI. Als Notiz wie und was (ungefähr...)
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: WestsideDiceghost/Liga-System#24
No description provided.