J
Jason R. Coombs
#!python
"""
In the documentation for __del__ (under Python Language Reference/Data
Model), the following warning is indicated:
Warning [Caveat in 2.6]: Due to the precarious circumstances under
which __del__() methods are invoked, exceptions that occur during
their execution are ignored, and a warning is printed to sys.stderr
instead. ...
That statement appears, however, to be incorrect.
Perhaps the warning should be re-worded to say "When __del__() methods
are invoked, exceptions that occur during the execution of such
methods must be caught and handled within the scope of the __del__()
method call. Otherwise unhandled exceptions will be ignored except
for a warning printed to sys.stderr instead."
For example,
"""
class X(object):
def __del__(self):
print 'deleting', self
try:
raise Exception, "OMG!"
except:
print 'caught exception, np'
print 'made it past the exception'
x = X()
del x
print 'x has been deleted, now what?'
"""
All this prints something like:
deleting <__main__.X object at 0x01BB1A50>
caught exception, np
made it past the exception
x has been deleted, now what?
"""
# - Jason R. Coombs
"""
In the documentation for __del__ (under Python Language Reference/Data
Model), the following warning is indicated:
Warning [Caveat in 2.6]: Due to the precarious circumstances under
which __del__() methods are invoked, exceptions that occur during
their execution are ignored, and a warning is printed to sys.stderr
instead. ...
That statement appears, however, to be incorrect.
Perhaps the warning should be re-worded to say "When __del__() methods
are invoked, exceptions that occur during the execution of such
methods must be caught and handled within the scope of the __del__()
method call. Otherwise unhandled exceptions will be ignored except
for a warning printed to sys.stderr instead."
For example,
"""
class X(object):
def __del__(self):
print 'deleting', self
try:
raise Exception, "OMG!"
except:
print 'caught exception, np'
print 'made it past the exception'
x = X()
del x
print 'x has been deleted, now what?'
"""
All this prints something like:
deleting <__main__.X object at 0x01BB1A50>
caught exception, np
made it past the exception
x has been deleted, now what?
"""
# - Jason R. Coombs