Code: Alles auswählen
try:
f = open("doesnotexist")
except:
etype, evalue, etb = sys.exc_info()
evalue = etype("Cannot open file: %s" % evalue)
raise etype, evalue, etb
Code: Alles auswählen
try:
f = open("doesnotexist")
except:
etype, evalue, etb = sys.exc_info()
evalue = etype("Cannot open file: %s" % evalue)
raise etype, evalue, etb
Die Implementierung nutzt allerdings exec in Python 2, geht ja auch nicht anders, weil die Syntax von raise geändert wurde.six.reraise(exc_type, exc_value, exc_traceback=None)
Reraise an exception, possibly with a different traceback. In the simple case, reraise(*sys.exc_info()) with an active exception (in an except block) reraises the current exception with the last traceback. A different traceback can be specified with the exc_traceback parameter.
Code: Alles auswählen
if PY3:
def reraise(tp, value, tb=None):
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value
else:
exec("""def reraise(tp, value, tb=None):
raise tp, value, tb
""")