summaryrefslogtreecommitdiffstats
path: root/Lib/ast.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/ast.py')
-rw-r--r--Lib/ast.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/Lib/ast.py b/Lib/ast.py
index 400d7c4..625738a 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -683,6 +683,7 @@ class _Unparser(NodeVisitor):
self._type_ignores = {}
self._indent = 0
self._avoid_backslashes = _avoid_backslashes
+ self._in_try_star = False
def interleave(self, inter, f, seq):
"""Call f on each item in seq, calling inter() in between."""
@@ -953,7 +954,7 @@ class _Unparser(NodeVisitor):
self.write(" from ")
self.traverse(node.cause)
- def visit_Try(self, node):
+ def do_visit_try(self, node):
self.fill("try")
with self.block():
self.traverse(node.body)
@@ -968,8 +969,24 @@ class _Unparser(NodeVisitor):
with self.block():
self.traverse(node.finalbody)
+ def visit_Try(self, node):
+ prev_in_try_star = self._in_try_star
+ try:
+ self._in_try_star = False
+ self.do_visit_try(node)
+ finally:
+ self._in_try_star = prev_in_try_star
+
+ def visit_TryStar(self, node):
+ prev_in_try_star = self._in_try_star
+ try:
+ self._in_try_star = True
+ self.do_visit_try(node)
+ finally:
+ self._in_try_star = prev_in_try_star
+
def visit_ExceptHandler(self, node):
- self.fill("except")
+ self.fill("except*" if self._in_try_star else "except")
if node.type:
self.write(" ")
self.traverse(node.type)