@@ -2836,9 +2836,7 @@ def _check_is_unused(
28362836 return
28372837
28382838 # Special case for exception variable
2839- if isinstance (stmt .parent , nodes .ExceptHandler ) and any (
2840- n .name == name for n in stmt .parent .nodes_of_class (nodes .Name )
2841- ):
2839+ if self ._is_exception_binding_used_in_handler (stmt , name ):
28422840 return
28432841
28442842 self .add_message (message_name , args = name , node = stmt )
@@ -2913,6 +2911,15 @@ def _check_unused_arguments(
29132911
29142912 self .add_message ("unused-argument" , args = name , node = stmt , confidence = confidence )
29152913
2914+ def _is_exception_binding_used_in_handler (
2915+ self , stmt : nodes .NodeNG , name : str
2916+ ) -> bool :
2917+ return (
2918+ isinstance (stmt .parent , nodes .ExceptHandler )
2919+ and stmt is stmt .parent .name
2920+ and any (n .name == name for n in stmt .parent .nodes_of_class (nodes .Name ))
2921+ )
2922+
29162923 def _check_late_binding_closure (self , node : nodes .Name ) -> None :
29172924 """Check whether node is a cell var that is assigned within a containing loop.
29182925
@@ -3238,6 +3245,8 @@ def _check_globals(self, not_consumed: dict[str, nodes.NodeNG]) -> None:
32383245 for node in node_lst :
32393246 if in_type_checking_block (node ):
32403247 continue
3248+ if self ._is_exception_binding_used_in_handler (node , name ):
3249+ continue
32413250 self .add_message ("unused-variable" , args = (name ,), node = node )
32423251
32433252 # pylint: disable = too-many-branches
0 commit comments