reraise...
Verfasst: Donnerstag 11. September 2014, 10:19
six.py hat ja das nette:
Nun habe ich sowas:
Nun ergibt das, dies:
Hier hätte ich allerdings gern, das klar ersichtlich ist, das hier ein KeyError aufgetreten ist. Denn so kann man Rätzeln, was einem die Fehlermeldung sagen soll...
Also ich hätte gern diese Meldung:
Das err bei except Exception as err: ist eigentlich eine Instanz von KeyError. Also die Information ist eigentlich da... Deswegen sieht meine Aktuelle Lösung so aus:
Aber geht das nicht einfacher?
bzw, gibt es nicht generell einen einfacheren "reraise" Ansatz für Python 2 und 3 ?
Code: Alles auswählen
if sys.version_info[0] == 3:
def reraise(tp, value, tb=None):
if value is None:
value = tp()
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value
else:
def exec_(_code_, _globs_=None, _locs_=None):
"""Execute code in a namespace."""
if _globs_ is None:
frame = sys._getframe(1)
_globs_ = frame.f_globals
if _locs_ is None:
_locs_ = frame.f_locals
del frame
elif _locs_ is None:
_locs_ = _globs_
exec("""exec _code_ in _globs_, _locs_""")
exec_("""def reraise(tp, value, tb=None):
raise tp, value, tb
""")Code: Alles auswählen
foo = {}
addr = 123
try:
bar = foo[addr]
except Exception as err:
msg = "%s | Hier Zusatzinformationen..." % err
reraise(Exception, Exception(msg), sys.exc_info()[2])Code: Alles auswählen
Traceback (most recent call last):
File "test.py", line 42, in <module>
reraise(Exception, Exception(msg), sys.exc_info()[2])
File "test.py", line 36, in <module>
bar = foo[addr]
Exception: 123 | Hier Zusatzinformationen...Also ich hätte gern diese Meldung:
Code: Alles auswählen
...
bar = foo[addr]
KeyError: 123 | Hier Zusatzinformationen...Das err bei except Exception as err: ist eigentlich eine Instanz von KeyError. Also die Information ist eigentlich da... Deswegen sieht meine Aktuelle Lösung so aus:
Code: Alles auswählen
...
except Exception as err:
msg = "%s | Hier Zusatzinformationen..." % err
exception = err.__class__
reraise(exception, exception(msg), sys.exc_info()[2])bzw, gibt es nicht generell einen einfacheren "reraise" Ansatz für Python 2 und 3 ?