[Python-Dev] RE: PEP-317

Guido van Rossum guido@python.org
2003年6月11日 09:12:35 -0400


> While we're at weird exception stuff... while aping bits of the
> exception handling code for pypy, I noticed that this should "work",
> and indeed it does:
>> >>> raise ((((Exception,), 'anything'), 'can', 'go'), 'in here'), 'arg'
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> Exception: arg
>> Any takers for an explanation?

When there were only string exceptions, I noticed the need for naming
a group of exceptions, e.g.
 io_related = (IOError, OSError, socket.SocketError)
 try:
	<some I/O intense stuff>
 except io_related, e:
	print "Some kind of I/O related error occurred:", e
So I implemented this. Then (still back in the string exceptions
days) I realized that once something like that is named, it pretty
much behaves like a single exception, so I figured that it should be
possible to raise it as well. This allows "upgrading" an exception
declared in a module to a group of exceptions without breaking code
that raises one of these.
I think the reasoning still holds, but:
(1) The syntax to catch multiple exceptions causes common mistakes
 like this:
 try:
 <some indexing operation>
 except KeyError, IndexError:
 <error handling>
(2) For upgrading exceptions, multiple inheritance makes more sense.
--Guido van Rossum (home page: http://www.python.org/~guido/)

AltStyle によって変換されたページ (->オリジナル) /