
On 12.05.2011 21:06, M.-A. Lemburg wrote:
Antoine Pitrou wrote:
On Fri, 08 Apr 2011 10:59:16 +0200 "M.-A. Lemburg" <mal@egenix.com> wrote:
I think EnvironmentError, WindowsError, VMSError, OSError, mmap.error and select.error should definitely all be merged with IOError, as they aren't used consistently enough to make handling them differently reliable even in current code.
Their use may be inconsistent in a few places, but those cases are still well-defined by the implementation, so code relying on that well-defined behavior will break in subtle ways.
Another quirk occurred to me today: select.error doesn't derive from EnvironmentError, and so it doesn't have the errno attribute (even though the select module "correctly" instantiates it with a (errno, message) tuple). Also, its str() is borked:
e = select.error(4, "interrupted") str(e) "(4, 'interrupted')" raise e Traceback (most recent call last): File "<stdin>", line 1, in <module> select.error: (4, 'interrupted')
Works fine in Python 2.7:
import select e = select.error(4, "intr") e error(4, 'intr')
Note that this is the repr(), while Antoine showed the str(). But the str() looks correct to me as well (for an exception that doesn't derive from EnvironmentError). Georg