27
27
from pylint .lint import PyLinter
28
28
29
29
30
- NodesWithNestedBlocks = Union [
31
- nodes .TryExcept , nodes .TryFinally , nodes .While , nodes .For , nodes .If
32
- ]
30
+ NodesWithNestedBlocks = Union [nodes .Try , nodes .While , nodes .For , nodes .If ]
33
31
34
32
KNOWN_INFINITE_ITERATORS = {"itertools.count" , "itertools.cycle" }
35
33
BUILTIN_EXIT_FUNCS = frozenset (("quit" , "exit" ))
@@ -71,7 +69,7 @@ def _if_statement_is_always_returning(
71
69
72
70
73
71
def _except_statement_is_always_returning (
74
- node : nodes .TryExcept , returning_node_class : nodes .NodeNG
72
+ node : nodes .Try , returning_node_class : nodes .NodeNG
75
73
) -> bool :
76
74
"""Detect if all except statements return."""
77
75
return all (
@@ -653,15 +651,13 @@ def leave_module(self, _: nodes.Module) -> None:
653
651
self ._init ()
654
652
655
653
@utils .only_required_for_messages ("too-many-nested-blocks" , "no-else-return" )
656
- def visit_tryexcept (self , node : nodes .TryExcept | nodes . TryFinally ) -> None :
654
+ def visit_try (self , node : nodes .Try ) -> None :
657
655
self ._check_nested_blocks (node )
658
656
659
- if isinstance (node , nodes .TryExcept ):
660
- self ._check_superfluous_else_return (node )
661
- self ._check_superfluous_else_raise (node )
657
+ self ._check_superfluous_else_return (node )
658
+ self ._check_superfluous_else_raise (node )
662
659
663
- visit_tryfinally = visit_tryexcept
664
- visit_while = visit_tryexcept
660
+ visit_while = visit_try
665
661
666
662
def _check_redefined_argument_from_local (self , name_node : nodes .AssignName ) -> None :
667
663
if self ._dummy_rgx and self ._dummy_rgx .match (name_node .name ):
@@ -723,13 +719,11 @@ def visit_with(self, node: nodes.With) -> None:
723
719
724
720
def _check_superfluous_else (
725
721
self ,
726
- node : nodes .If | nodes .TryExcept ,
722
+ node : nodes .If | nodes .Try ,
727
723
msg_id : str ,
728
724
returning_node_class : nodes .NodeNG ,
729
725
) -> None :
730
- if isinstance (node , nodes .TryExcept ) and isinstance (
731
- node .parent , nodes .TryFinally
732
- ):
726
+ if isinstance (node , nodes .Try ) and node .finalbody :
733
727
# Not interested in try/except/else/finally statements.
734
728
return
735
729
@@ -745,7 +739,8 @@ def _check_superfluous_else(
745
739
isinstance (node , nodes .If )
746
740
and _if_statement_is_always_returning (node , returning_node_class )
747
741
) or (
748
- isinstance (node , nodes .TryExcept )
742
+ isinstance (node , nodes .Try )
743
+ and not node .finalbody
749
744
and _except_statement_is_always_returning (node , returning_node_class )
750
745
):
751
746
orelse = node .orelse [0 ]
@@ -1962,7 +1957,7 @@ def _is_node_return_ended(self, node: nodes.NodeNG) -> bool:
1962
1957
return self ._is_raise_node_return_ended (node )
1963
1958
if isinstance (node , nodes .If ):
1964
1959
return self ._is_if_node_return_ended (node )
1965
- if isinstance (node , nodes .TryExcept ):
1960
+ if isinstance (node , nodes .Try ):
1966
1961
handlers = {
1967
1962
_child
1968
1963
for _child in node .get_children ()
0 commit comments