Fehlerauswertung in Eclipse (exc_info)

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
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

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
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
ChrisGTJ
User
Beiträge: 105
Registriert: Mittwoch 22. August 2007, 15:45

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
Antworten