Message341868
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. |
|
Date |
User |
Action |
Args |
2019-05-08 12:21:46 | vstinner | set | recipients:
+ vstinner, serhiy.storchaka, graingert, matrixise, ZackerySpytz |
2019-05-08 12:21:46 | vstinner | set | messageid: <1557318106.82.0.356037594252.issue36829@roundup.psfhosted.org> |
2019-05-08 12:21:46 | vstinner | link | issue36829 messages |
2019-05-08 12:21:46 | vstinner | create | |
|