class_docstr: Mapping bytecode to ast-node based on the source positions, which where introduced in pyhon 3.11.
  In general every ast-node can be exactly referenced by its begin/end line/col_offset, which is stored in the bytecode.
  There are only some exceptions for methods and attributes.
code: def is_except_cleanup(
      inst: dis.Instruction, node: EnhancedAST
  ) -> bool:
      if inst.opname not in (
          "STORE_NAME",
          "STORE_FAST",
          "STORE_DEREF",
          "STORE_GLOBAL",
          "DELETE_NAME",
          "DELETE_FAST",
          "DELETE_DEREF",
          "DELETE_GLOBAL",
      ):
          return False
  
      # This bytecode does something exception cleanup related.
      # The position of the instruciton seems to be something in the last ast-node of the ExceptHandler
      # this could be a bug, but it might not be observable in normal python code.
  
      # example:
      # except Exception as exc:
      #     enum_member._value_ = value
  
      # other example:
      # STORE_FAST of e was mapped to Constant(value=False)
      # except OSError as e:
      #     if not _ignore_error(e):
      #         raise
      #     return False
  
      # STORE_FAST of msg was mapped to print(...)
      #  except TypeError as msg:
      #      print("Sorry:", msg, file=file)
  
      if (
          isinstance(node, ast.Name)
          and isinstance(node.ctx, ast.Store)
          and inst.opname.startswith("STORE_")
          and mangled_name(node) == inst.argval
      ):
          # Storing the variable is valid and no exception cleanup, if the name is correct
          return False
  
      if (
          isinstance(node, ast.Name)
          and isinstance(node.ctx, ast.Del)
          and inst.opname.startswith("DELETE_")
          and mangled_name(node) == inst.argval
      ):
          # Deleting the variable is valid and no exception cleanup, if the name is correct
          return False
  
      return any(
          isinstance(n, ast.ExceptHandler)
          and n.name
          and mangled_name(n) == inst.argval
          for n in parents(node)
      )
  
imports: import ast
  import sys
  import dis
  from types import CodeType, FrameType
  from typing import Any, Callable, Iterator, Optional, Sequence, Set, Tuple, Type, Union, cast
  from .executing import EnhancedAST, NotOneValueFound, Source, only, function_node_types, assert_
  from ._exceptions import KnownIssue, VerifierFailure
  from functools import lru_cache
label_desc: Use image node_id 4 for calling the PositionNodeFinder obj's underlying member method code with example usage: obj.is_except_cleanup(inst, node) and returns: any, False, False, False