import sys import weakref import os class Object: def __del__(self, builtin_print=print, file=sys.stderr): # fails because sys.stderr is already closed builtin_print("__del__", file=file) def callback(*obj, builtin_print=print, file=sys.stderr): # not called: weak references cleared instead builtin_print("weakref callback", file=file) def unraisable(obj, os_exit=os._exit): # not called: sys.unraisablehook already cleared os_exit(5) obj = Object() sys.obj_ref = weakref.ref(obj, callback) sys.unraisablehook = unraisable