docstr: This is where the evaluation happens.
  Users should use `__getitem__`, i.e. `evaluator[node]`,
  as it provides caching.
  
  :param node: an AST expression to evaluate
  :return: the value of the node
docstr_tok: ["This","is","where","the","evaluation","happens",".","Users","should","use","`","__getitem__","`",",","i.e",".","`","evaluator","[","node","]","`",",","as","it","provides","caching",".",":","param","node",":","an","AST","expression","to","evaluate",":","return",":","the","value","of","the","node"]
code: def _handle(self, node: ast.expr) -> Any:
      """
      This is where the evaluation happens.
      Users should use `__getitem__`, i.e. `evaluator[node]`,
      as it provides caching.
  
      :param node: an AST expression to evaluate
      :return: the value of the node
      """
  
      with suppress(Exception):
          return ast.literal_eval(node)
  
      if isinstance(node, ast.Name):
          try:
              return self.names[node.id]
          except KeyError:
              raise CannotEval
      elif isinstance(node, ast.Attribute):
          value = self[node.value]
          attr = node.attr
          return getattr_static(value, attr)
      elif isinstance(node, ast.Subscript):
          return self._handle_subscript(node)
      elif isinstance(node, (ast.List, ast.Tuple, ast.Set, ast.Dict)):
          return self._handle_container(node)
      elif isinstance(node, ast.UnaryOp):
          return self._handle_unary(node)
      elif isinstance(node, ast.BinOp):
          return self._handle_binop(node)
      elif isinstance(node, ast.BoolOp):
          return self._handle_boolop(node)
      elif isinstance(node, ast.Compare):
          return self._handle_compare(node)
      elif isinstance(node, ast.Call):
          return self._handle_call(node)
      raise CannotEval
  
imports: import ast
  import builtins
  import operator
  from collections import ChainMap, OrderedDict, deque
  from contextlib import suppress
  from types import FrameType
  from typing import Any, Tuple, Iterable, List, Mapping, Dict, Union, Set
  from pure_eval.my_getattr_static import getattr_static
  from pure_eval.utils import CannotEval, has_ast_name, copy_ast_without_context, is_standard_types, of_standard_types, is_any, of_type, ensure_dict
label_desc: Use image node_id 4 for calling the Evaluator obj's underlying member method code with example usage: obj._handle(node) and returns: ast, self, getattr_static, self, self, self, self, self, self, self