parameters: (tid, exctype)
docstring: raises the exception, performs cleanup if needed
docstring_summary: raises the exception, performs cleanup if needed
docstring_tokens: raises the exception performs cleanup if needed
function: def _async_raise(tid, exctype):
      """raises the exception, performs cleanup if needed"""
      if not inspect.isclass(exctype):
          raise TypeError("Only types can be raised (not instances)")
      res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
      if res == 0:
          raise ValueError("invalid thread id")
      elif res != 1:
          # """if it returns a number greater than one, you're in trouble, 
          # and you should call it again with exc=NULL to revert the effect"""
          ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, 0)
          raise SystemError("PyThreadState_SetAsyncExc failed")
function_tokens: def _async_raise ( tid , exctype ) : if not inspect . isclass ( exctype ) : raise TypeError ( "Only types can be raised (not instances)" ) res = ctypes . pythonapi . PyThreadState_SetAsyncExc ( tid , ctypes . py_object ( exctype ) ) if res == 0 : raise ValueError ( "invalid thread id" ) elif res != 1 : # """if it returns a number greater than one, you're in trouble,  # and you should call it again with exc=NULL to revert the effect""" ctypes . pythonapi . PyThreadState_SetAsyncExc ( tid , 0 ) raise SystemError ( "PyThreadState_SetAsyncExc failed" )