diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index 2504c0c84a..2bd553fa11 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -950,6 +950,12 @@ def _defines_name_raises_or_returns(name: str, node: nodes.NodeNG) -> bool: return True if isinstance(node, (nodes.ClassDef, nodes.FunctionDef)) and node.name == name: return True + if ( + isinstance(node, nodes.ExceptHandler) + and node.name + and node.name.name == name + ): + return True return False @staticmethod diff --git a/tests/functional/u/unused/unused_variable.py b/tests/functional/u/unused/unused_variable.py index 9dabe5b59f..f15ae75576 100644 --- a/tests/functional/u/unused/unused_variable.py +++ b/tests/functional/u/unused/unused_variable.py @@ -199,3 +199,20 @@ def nonlocal_writer(): nonlocal_writer() assert a == 9, a + +def test_regression_8595(): + # pylint: disable=broad-exception-caught + import logging + def compute(): + pass + try: + compute() + error = False + except Exception as e: + logging.error(e) + error = True + if error: + try: + compute() + except Exception as e: # [unused-variable] + pass diff --git a/tests/functional/u/unused/unused_variable.txt b/tests/functional/u/unused/unused_variable.txt index 19983d5365..609ce9fef6 100644 --- a/tests/functional/u/unused/unused_variable.txt +++ b/tests/functional/u/unused/unused_variable.txt @@ -26,3 +26,4 @@ unused-variable:150:4:154:26:func4:Unused variable 'error':UNDEFINED redefined-outer-name:153:8:154:26:func4:Redefining name 'error' from outer scope (line 150):UNDEFINED unused-variable:161:4:162:12:main:Unused variable 'e':UNDEFINED undefined-loop-variable:168:10:168:11:main:Using possibly undefined loop variable 'e':UNDEFINED +unused-variable:217:8:218:16:test_regression_8595:Unused variable 'e':UNDEFINED