STINNER Victor <vstin...@redhat.com> added the comment:
I wrote PR 13187 to control how unraisable exceptions are handled. Attached uncollectable.py, gc_callback.py and io_destructor.py examples can be used to test unraisable exceptions. Without my PR: --- $ ./python -Werror uncollectable.py ResourceWarning: gc: 2 uncollectable objects at shutdown; use gc.set_debug(gc.DEBUG_UNCOLLECTABLE) to list them $ ./python gc_callback.py Exception ignored in: <function wr_callback at 0x7f9b48d2b2b0> Traceback (most recent call last): File "gc_callback.py", line 7, in wr_callback raise ValueError(42) ValueError: 42 $ ./python -X dev io_destructor.py io_destructor.py:4: ResourceWarning: unclosed file <_io.TextIOWrapper name='io_destructor.py' mode='r' encoding='UTF-8'> f = None ResourceWarning: Enable tracemalloc to get the object allocation traceback Exception ignored in: <_io.TextIOWrapper name='io_destructor.py' mode='r' encoding='UTF-8'> OSError: [Errno 9] Bad file descriptor --- For example, apply attached site_hook.patch to install a custom unraisablehook. Output with my PR + site_hook.patch: --- $ ./python -Werror uncollectable.py ResourceWarning: gc: 2 uncollectable objects at shutdown; use gc.set_debug(gc.DEBUG_UNCOLLECTABLE) to list them $ ./python gc_callback.py Exception ignored in: <function wr_callback at 0x7fb59a0f9510> File "gc_callback.py", line 7, in wr_callback raise ValueError(42) ValueError: 42 Traceback (most recent call last): File "gc_callback.py", line 11, in <module> obj = None $ ./python -X dev io_destructor.py io_destructor.py:4: ResourceWarning: unclosed file <_io.TextIOWrapper name='io_destructor.py' mode='r' encoding='UTF-8'> f = None ResourceWarning: Enable tracemalloc to get the object allocation traceback Exception ignored in: <_io.TextIOWrapper name='io_destructor.py' mode='r' encoding='UTF-8'> OSError: [Errno 9] Bad file descriptor Traceback (most recent call last): File "io_destructor.py", line 4, in <module> f = None --- The first good news is that it *is* possible to write a custom hook for unraisable for one of the last unraisable exception: _PyGC_DumpShutdownStats() which logs "uncollectable objects at shutdown". When an unraisable exceptions is logged before Python finalization, the hook can inspect the Python stack to see where the exception has been raised which helps debugging. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue36829> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com