Traceback ohne Zeile mit "raise"

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
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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__
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Schreib dir deine eigene Custom Exception. Vllt. hilfreich für dich: http://en.wikibooks.org/wiki/Python_Pro ... Exceptions
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

ja, das habe ich nicht richtig verstanden,... ich denke, dass das dann nur über das Traceback Modul geht. Was soll das eigentlich bewirken?
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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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