[Python-Dev] PEP 442: Safe object finalization

Richard Oudkerk shibturn at gmail.com
Sat May 18 15:56:38 CEST 2013


On 18/05/2013 9:59am, Antoine Pitrou wrote:
> This PEP proposes to turn CI disposal into the following sequence (new
> steps are in bold):
>
> 1. Weakrefs to CI objects are cleared, and their callbacks called. At
>     this point, the objects are still safe to use.
>
> 2. **The finalizers of all CI objects are called.**

How do you know that one of the finalizers will not do something which 
causes another to fail?

Presumably the following would cause an AttributeError to be printed:

     class Node:
         def __init__(self):
             self.next = None
         def __del__(self):
             print(self, self.next)
             del self.next                   # break Node object

     a = Node()
     b = Node()
     a.next = b
     b.next = a
     del a, b
     gc.collect()

Are there are less contrived examples which will cause errors where 
currently there are none?

-- 
Richard



More information about the Python-Dev mailing list