diff options
author | designst <info@designstage.ch> | 2014-05-22 08:08:13 +0200 |
---|---|---|
committer | designst <info@designstage.ch> | 2014-05-22 08:08:13 +0200 |
commit | cb9105d605730699f6302ab441755ceb02ee17ab (patch) | |
tree | 7a7afefb4485c9393a50142095826f64ca97c10b | |
parent | 0aafca82e94b780c5ce2c178d7d4ee18bcd2ab41 (diff) | |
download | mako-cb9105d605730699f6302ab441755ceb02ee17ab.tar.gz |
use reraise function for error_handler
-rw-r--r-- | mako/compat.py | 12 | ||||
-rw-r--r-- | mako/runtime.py | 13 |
2 files changed, 15 insertions, 10 deletions
diff --git a/mako/compat.py b/mako/compat.py index e26b65b..fe277bb 100644 --- a/mako/compat.py +++ b/mako/compat.py @@ -68,6 +68,18 @@ else: fp.close() +if py3k: + def reraise(tp, value, tb=None, cause=None): + if cause is not None: + value.__cause__ = cause + if value.__traceback__ is not tb: + raise value.with_traceback(tb) + raise value +else: + exec("def reraise(tp, value, tb=None, cause=None):\n" + " raise tp, value, tb\n") + + def exception_as(): return sys.exc_info()[1] diff --git a/mako/runtime.py b/mako/runtime.py index c968264..31ad557 100644 --- a/mako/runtime.py +++ b/mako/runtime.py @@ -852,25 +852,18 @@ def _exec_template(callable_, context, args=None, kwargs=None): try: callable_(context, *args, **kwargs) except Exception: - _render_error(template, context, compat.exception_as(), sys.exc_info()) + _render_error(template, context, compat.exception_as()) except: e = sys.exc_info()[0] _render_error(template, context, e) else: callable_(context, *args, **kwargs) -def _render_error(template, context, error, exc_info=None): +def _render_error(template, context, error): if template.error_handler: result = template.error_handler(context, error) if not result: - if exc_info: - t, v, tb = exc_info - if sys.version_info[0] <= 2: - exec('raise v, None, tb.tb_next') - else: - raise v.with_traceback(tb.tb_next) - else: - raise error + compat.reraise(*sys.exc_info()) else: error_template = exceptions.html_error_template() if context._outputting_as_unicode: |