Seite 1 von 1

Fehlerauswertung in Eclipse (exc_info)

Verfasst: Donnerstag 23. August 2007, 17:28
von ChrisGTJ
Tag, ich bin's schon wieder.

Wie kann ich Eclipse dazu bringen, mir "einfach so" den Fehlercode auszugeben, wenn eine Exception geworfen wird? Da ich mich in einem Framework befinde, könnte es sein, daß die Exception von einer der Frameworkfunktionen "weggefangen" wird, ohne daß ich sie sehe.

Ich habe mir folgende Lösung gebastelt:

Code: Alles auswählen


import sys, traceback

def testFunc():
    a= gibtsNich

def mainFunc():
    try
        testFunc()
    except:
        print "-----[Traceback START]-----"
        print traceback.format_exc(sys.exc_info()[2]),
        print "-----[Traceback END]-----"

mainFunc()
Den try-except Block habe ich um den Codebereich gepackt, den ich unter Kontrolle habe. Das dumme ist nur, daß der Block nur zu Testzwecken drin sein soll und ich ihn nicht in jedes Modul schleppen will, daß ich vielleicht mal anfasse.

Also: Gibt es eine Möglichkeit, daß Eclipse mir die *erste* auftretene Exception in der oben präsentierten Form anzeigt? Oder gibt es eine elegantere Möglichkeit, als die meine?

Gruß und Danke,

Christoph

Verfasst: Donnerstag 23. August 2007, 18:53
von BlackJack
Ich verstehe die Frage nicht ganz!? Eclipse zeigt die Ausnahme doch an!?

Dieser Fehler wird darüber hinaus auch von `pylint` erkannt. Da ist bei mir im Quelltext so ein nettes rotes X am Rand.

Verfasst: Donnerstag 23. August 2007, 19:43
von jens
Also das verstehe ich jetzt auch nicht. Eclipse zeit normalerweise einen Traceback an und die Angaben zur Fehlerquelle (Zeile im Sourcecode) funktionieren sogar als Links. Also man springt in den Sourcode direkt an die richtige Stelle...

Verfasst: Freitag 24. August 2007, 09:43
von ChrisGTJ
So, ich habe die Ursache gefunden, es ist tatsächlich das Framework, das die Exception verschluckt, ein Bug also.

Heißt das also, wenn irgendwo eine Exception behandelt wird, dann gibt Eclipse den Traceback nicht mehr automatisch aus? Wieder was gelernt.

Den Tip mit pylint finde ich gut, das sollten wir uns wohl mal näher anschauen.

Danke für's Zuhören. Ich hoffe, meine Fragen und Problemchen sind zu dämlich für Eure geneigten Ohren und Augen :roll: , weil es doch letztlich meine eigenen Fehler waren.

Danke noch mal,

Christoph

Verfasst: Freitag 24. August 2007, 10:04
von EyDu
ChrisGTJ hat geschrieben:Heißt das also, wenn irgendwo eine Exception behandelt wird, dann gibt Eclipse den Traceback nicht mehr automatisch aus?
Ganz genau, zu einer Exception wird nur dann ein Traceback ausgegeben, wenn sie dein Programm "verlässt" und im letzen Schritt den Interpreter erreicht. Dieser fängt diee Exception dann ab und kann sie melden.

Anders würde es in Python auch keinen Sinn machen, mit Exceptions umzugehen, da die Anwendung diese durch eine entsprechende Behandlung als "erwartet" einstuft. Hinzu kommt noch, dass du hunderte von Tracebacks hättest, da an allen möglichen Stellen Exceptions verwendet werden (siehe: Easier to Ask Forgiveness than Permission).

Besonders spaßig ist das Arbeiten mit Exceptions unter Delphi (7), wo wirklich jede Exception bei deren Auslösung angezeigt wird. Ein vernünftiges Testen mit Debugger im Hintergrund ist dann kaum noch möglich, besonders nicht bei Multithreading-Anwendungen :D

Verfasst: Montag 27. August 2007, 09:55
von ChrisGTJ
EyDu hat geschrieben:
ChrisGTJ hat geschrieben:Heißt das also, wenn irgendwo eine Exception behandelt wird, dann gibt Eclipse den Traceback nicht mehr automatisch aus?
Ganz genau, zu einer Exception wird nur dann ein Traceback ausgegeben, wenn sie dein Programm "verlässt" und im letzen Schritt den Interpreter erreicht. Dieser fängt diee Exception dann ab und kann sie melden.

Anders würde es in Python auch keinen Sinn machen, mit Exceptions umzugehen, da die Anwendung diese durch eine entsprechende Behandlung als "erwartet" einstuft. Hinzu kommt noch, dass du hunderte von Tracebacks hättest, da an allen möglichen Stellen Exceptions verwendet werden (siehe: Easier to Ask Forgiveness than Permission).

Besonders spaßig ist das Arbeiten mit Exceptions unter Delphi (7), wo wirklich jede Exception bei deren Auslösung angezeigt wird. Ein vernünftiges Testen mit Debugger im Hintergrund ist dann kaum noch möglich, besonders nicht bei Multithreading-Anwendungen :D
Hm, ja, das klingt logisch. Vielen Dank. Das Problem haben wir jetzt an der Stelle gelöst, an der es gelöst werden muß, im Framework.

Gruß,

Christoph