summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordesignst <info@designstage.ch>2014-05-22 08:08:13 +0200
committerdesignst <info@designstage.ch>2014-05-22 08:08:13 +0200
commitcb9105d605730699f6302ab441755ceb02ee17ab (patch)
tree7a7afefb4485c9393a50142095826f64ca97c10b
parent0aafca82e94b780c5ce2c178d7d4ee18bcd2ab41 (diff)
downloadmako-cb9105d605730699f6302ab441755ceb02ee17ab.tar.gz
use reraise function for error_handler
-rw-r--r--mako/compat.py12
-rw-r--r--mako/runtime.py13
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: