On 11/29/20, Chris Angelico <ros...@gmail.com> wrote: > > This seems like a really REALLY bad idea. You're putting a lot of work > into your __del__ function, and that's not getting called until > everything's shutting down. (Also, xrange doesn't exist, hence the > "exception ignored" thing.) > > Avoid putting this sort of work into __del__ by explicitly marking > that you're done with the object. A context manager is a good choice > here.
The documentation of the __del__() finalizer contains the following warning: __del__() can be executed during interpreter shutdown. As a consequence, the global variables it needs to access (including other modules) may already have been deleted or set to None. A finalizer can locally reference required globals and builtins as the default value of keyword-only arguments, e.g. __del__(self, *, open=open). But in this case I second the suggestion to make the object a context manager with __enter__() and __exit__() methods. -- https://mail.python.org/mailman/listinfo/python-list