code: def _handle_soft_error(exc_type, exc_value, exc_tb):
      err("%s: %s" % (exc_type.__name__, exc_value))
  
      # Convert to the list of frames
      tb = exc_tb
      frames = []
      while tb:
          frames.append(tb.tb_frame)
          tb = tb.tb_next
  
      i0 = len(frames) - 1 - getattr(exc_value, "skip_frames", 0)
      indent = " " * (len(exc_type.__name__) + 2)
      for i in range(i0, 0, -1):
          co = frames[i].f_code
          func = _find_function_from_code(frames[i - 1], co)
          fullname = (
              _get_method_full_name(func)
              if func
              else "???." + co.co_name
          )
          highlight = (
              getattr(exc_value, "var_name", None) if i == i0 else None
          )
          args_str = _get_args_str(func, highlight=highlight)
          indent_len = len(exc_type.__name__) + len(fullname) + 6
          line = indent + ("in " if i == i0 else "   ")
          line += fullname + "("
          line += _wrap(
              args_str + ") line %d" % frames[i].f_lineno,
              indent=indent_len,
          )
          err(line)
      err()
  
file_path: h2o-3/h2o-py/h2o/utils/debugging.py
imports: import inspect
  import re
  import sys
  from types import ModuleType
  from h2o.exceptions import H2OJobCancelled, H2OSoftError
  from h2o.utils.compatibility import *
label_desc: Use image node_id 4 for calling a global function with example usage: _handle_soft_error(exc_type, exc_value, exc_tb) without return types