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:

Code: Alles auswählen

def f1():
    raise TypeError

f1()
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

Code: Alles auswählen

[1,2,3]['a']
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...