The logging handler does not handle double-closing very well: >>> from logging import StreamHandler >>> h = StreamHandler() >>> h.close() >>> h.close() Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/logging/__init__.py", line 705, in close del _handlers[self] KeyError: <logging.StreamHandler instance at 0xb7609c8c> There are two possible approaches to this: 1. Raise a better error. 2. Ignore the duplicate close. This patch takes option 2 as this is likely not indicative of any kind of programmer error, but it shouldn't be too difficult to take option 1 instead.
This part of the code has been changed in trunk (to use weak references), and the error does not occur in Python 2.7/3.2. I'm not sure I fully agree with your assertion that it's not a programmer error to close a handler twice - this could certainly happen as a result of a bug in the application. So, I'm not sure (now that we're in Python 2.7 beta) that it's worth backporting this to 2.6.6. Thoughts?
File-like objects handle multiple close() gracefully, silently making the second and subsequent close() calls to an already closed I/O object do nothing. Why can't the same expectation be applied to logging handlers?
----- Original Message ---- > From: Santoso Wijaya <report@bugs.python.org> > File-like objects handle multiple close() gracefully, silently > making the second and subsequent close() calls to an already closed I/O object > do nothing. Why can't the same expectation be applied to logging > handlers? I'm not objecting to the change on philosophical grounds, merely commenting that it doesn't happen in 2.7/3.2 and suggesting it's not worth fixing in 2.6/3.1.