Seite 1 von 1
Traceback ohne Zeile mit "raise"
Verfasst: Donnerstag 9. Juli 2009, 09:10
von ms4py
Ist es möglich, eine Exception zu werfen, ohne dass diese entsprechende Zeile im Traceback auftaucht?
Bsp:
Exception ist hier:
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\student7\Desktop\test.py", line 4, in <module>
f1()
File "C:\Dokumente und Einstellungen\student7\Desktop\test.py", line 2, in f1
raise TypeError
TypeError
Allerdings möchte ich, dass die Zeile mit raise nicht auftaucht.
Ein TypeError mit
führt ja auch nicht bis list.__getitem__
Verfasst: Donnerstag 9. Juli 2009, 10:07
von nemomuk
Schreib dir deine eigene Custom Exception. Vllt. hilfreich für dich:
http://en.wikibooks.org/wiki/Python_Pro ... Exceptions
Verfasst: Donnerstag 9. Juli 2009, 11:38
von ms4py
Ich glaube, du weißt nicht was ich will.
Code: Alles auswählen
class MyException(Exception):
def __init__(self, val):
self.val = val
def __str__(self):
return str(self.val)
def f1():
raise MyException("test")
f1()
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\student7\Desktop\test.py", line 11, in <module>
f1()
File "C:\Dokumente und Einstellungen\student7\Desktop\test.py", line 9, in f1
raise MyException("test")
MyException: test
Die fett markierten Zeilen sollten im Traceback nicht auftauchen.
Verfasst: Donnerstag 9. Juli 2009, 12:52
von nemomuk
ja, das habe ich nicht richtig verstanden,... ich denke, dass das dann nur über das Traceback Modul geht. Was soll das eigentlich bewirken?
Verfasst: Donnerstag 9. Juli 2009, 14:30
von lunar
Die auslösende Ausnahme kann den Traceback nicht beeinflussen. Wenn Builtins keinen vollständigen Traceback erzeugen, dann nur, weil die entsprechenden Methoden oder Funktion in C implementiert und damit der Kontrolle des Python-Interpreters entzogen sind.
Das einzige, was du tun kannst, ist den Traceback nach dem Abfangen der Ausnahme zu manipulieren, und das tiefste Callframe zu entfernen.
Verfasst: Donnerstag 9. Juli 2009, 14:41
von ms4py
SchneiderWeisse hat geschrieben:ja, das habe ich nicht richtig verstanden,... ich denke, dass das dann nur über das Traceback Modul geht. Was soll das eigentlich bewirken?
Wollte nur, dass meine eigene Container-Klasse über die __getitem__ mehr wie ein Builtin wirkt. Aber der Aufwand lohnt sich dann nicht, noch am Traceback herumzumanipulieren...