From 5916b676de199936fbf212835298a02608b0a04e Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 18 Aug 2017 18:53:11 +0200 Subject: [PATCH] Move the TryStmtRule. --- parso/python/errors.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/parso/python/errors.py b/parso/python/errors.py index 7bd271e..0acda12 100644 --- a/parso/python/errors.py +++ b/parso/python/errors.py @@ -294,16 +294,6 @@ class ErrorFinder(Normalizer): # Error leafs will be added later as an error. self._add_syntax_error("invalid syntax", leaf) elif node.type in _BLOCK_STMTS: - if node.type == 'try_stmt': - default_except = None - for except_clause in node.children[3::3]: - if except_clause in ('else', 'finally'): - break - if except_clause == 'except': - default_except = except_clause - elif default_except is not None: - self._add_syntax_error("default 'except:' must be last", default_except) - with self.context.add_block(node): if len(self.context.blocks) == _MAX_BLOCK_SIZE: self._add_syntax_error("too many statically nested blocks", node) @@ -808,6 +798,21 @@ class _ParameterRule(SyntaxRule): default_only = True +@ErrorFinder.register_rule(type='try_stmt') +class _TryStmtRule(SyntaxRule): + message = "default 'except:' must be last" + + def is_issue(self, try_stmt): + default_except = None + for except_clause in try_stmt.children[3::3]: + if except_clause in ('else', 'finally'): + break + if except_clause == 'except': + default_except = except_clause + elif default_except is not None: + self.add_issue(default_except, message=self.message) + + class _CheckAssignmentRule(SyntaxRule): def _check_assignment(self, node, is_deletion=False): error = None