@@ -2836,9 +2836,7 @@ def _check_is_unused(
2836
2836
return
2837
2837
2838
2838
# 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 ):
2842
2840
return
2843
2841
2844
2842
self .add_message (message_name , args = name , node = stmt )
@@ -2913,6 +2911,15 @@ def _check_unused_arguments(
2913
2911
2914
2912
self .add_message ("unused-argument" , args = name , node = stmt , confidence = confidence )
2915
2913
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
+
2916
2923
def _check_late_binding_closure (self , node : nodes .Name ) -> None :
2917
2924
"""Check whether node is a cell var that is assigned within a containing loop.
2918
2925
@@ -3238,6 +3245,8 @@ def _check_globals(self, not_consumed: dict[str, nodes.NodeNG]) -> None:
3238
3245
for node in node_lst :
3239
3246
if in_type_checking_block (node ):
3240
3247
continue
3248
+ if self ._is_exception_binding_used_in_handler (node , name ):
3249
+ continue
3241
3250
self .add_message ("unused-variable" , args = (name ,), node = node )
3242
3251
3243
3252
# pylint: disable = too-many-branches
0 commit comments