fail_cpp_exception.py 985 B

123456789101112131415161718192021222324252627282930313233
  1. # -*- coding: utf-8 -*-
  2. """
  3. Helper for testing a C++ exception throw aborts the process.
  4. Takes one argument, the name of the function in :mod:`_test_extension_cpp` to call.
  5. """
  6. import sys
  7. import greenlet
  8. from greenlet.tests import _test_extension_cpp
  9. print('fail_cpp_exception is running')
  10. def run_unhandled_exception_in_greenlet_aborts():
  11. def _():
  12. _test_extension_cpp.test_exception_switch_and_do_in_g2(
  13. _test_extension_cpp.test_exception_throw_nonstd
  14. )
  15. g1 = greenlet.greenlet(_)
  16. g1.switch()
  17. func_name = sys.argv[1]
  18. try:
  19. func = getattr(_test_extension_cpp, func_name)
  20. except AttributeError:
  21. if func_name == run_unhandled_exception_in_greenlet_aborts.__name__:
  22. func = run_unhandled_exception_in_greenlet_aborts
  23. elif func_name == 'run_as_greenlet_target':
  24. g = greenlet.greenlet(_test_extension_cpp.test_exception_throw_std)
  25. func = g.switch
  26. else:
  27. raise
  28. print('raising', func, flush=True)
  29. func()