More Python 3 support.
--HG--
branch : trunk
diff --git a/jinja2/environment.py b/jinja2/environment.py
index 569b9b3..603c4aa 100644
--- a/jinja2/environment.py
+++ b/jinja2/environment.py
@@ -370,7 +370,8 @@
try:
return Parser(self, source, name, filename).parse()
except TemplateSyntaxError:
- self.handle_exception(sys.exc_info(), source_hint=source)
+ exc_info = sys.exc_info()
+ self.handle_exception(exc_info, source_hint=source)
def lex(self, source, name=None, filename=None):
"""Lex the given sourcecode and return a generator that yields
@@ -386,7 +387,8 @@
try:
return self.lexer.tokeniter(source, name, filename)
except TemplateSyntaxError:
- self.handle_exception(sys.exc_info(), source_hint=source)
+ exc_info = sys.exc_info()
+ self.handle_exception(exc_info, source_hint=source)
def preprocess(self, source, name=None, filename=None):
"""Preprocesses the source with all extensions. This is automatically
@@ -464,6 +466,7 @@
**new in Jinja 2.1**
"""
parser = Parser(self, source, state='variable')
+ exc_info = None
try:
expr = parser.parse_expression()
if not parser.stream.eos:
@@ -471,7 +474,9 @@
parser.stream.current.lineno,
None, None)
except TemplateSyntaxError:
- self.handle_exception(sys.exc_info(), source_hint=source)
+ exc_info = sys.exc_info()
+ if exc_info is not None:
+ self.handle_exception(exc_info, source_hint=source)
body = [nodes.Assign(nodes.Name('result', 'store'), expr, lineno=1)]
template = self.from_string(nodes.Template(body, lineno=1))
return TemplateExpression(template, undefined_to_none)
@@ -650,7 +655,8 @@
try:
return concat(self.root_render_func(self.new_context(vars)))
except:
- return self.environment.handle_exception(sys.exc_info(), True)
+ exc_info = sys.exc_info()
+ return self.environment.handle_exception(exc_info, True)
def stream(self, *args, **kwargs):
"""Works exactly like :meth:`generate` but returns a
@@ -671,7 +677,10 @@
for event in self.root_render_func(self.new_context(vars)):
yield event
except:
- yield self.environment.handle_exception(sys.exc_info(), True)
+ exc_info = sys.exc_info()
+ else:
+ return
+ yield self.environment.handle_exception(exc_info, True)
def new_context(self, vars=None, shared=False, locals=None):
"""Create a new :class:`Context` for this template. The vars