Correct use of try,except and raise?
Roy Smith
roy at panix.com
Sat Jul 12 20:32:53 EDT 2008
In article
<3b78898b-6131-4137-9c1d-64deaf460ee6 at p25g2000hsf.googlegroups.com>,
ssecorp <circularfunc at gmail.com> wrote:
> Is this correct use of exceptions? to raise an indexerror and add my
> own string insetad of just letting it raise a IndexError by itself and
> "blaming" it on list.pop?
>
> class Stack(object):
> def __init__(self, *items):
> self.stack = list(items)
>
> def push(self, item):
> self.stack.append(item)
>
> def pop(self):
> try:
> return self.stack.pop()
> except:
> raise IndexError, "pop from empty stack"
>
> class Queue(object):
> def __init__(self, *items):
> self.queue = list(items)
>
> def append(self, item):
> self.queue.append(item)
>
> def pop(self):
> try:
> return self.queue.pop(0)
> except:
> raise IndexError, "pop from empty queue"
I think you would do better defining a new exception, PopError, or
something like that. Then you can write code which specifically catches
that and do something with it.
It's also not a good idea to catch all exceptions. Catch the most specific
thing you can. Consider something like:
try:
kew.pop(0)
except:
raise IndexError, "pop from empty kew"
When I run it, it prints, "IndexError: pop from empty kew". The problem
is, the *real* error is "NameError: name 'kew' is not defined". By
catching all exceptions, I've masked a programming error by turning the
NameError into an IndexError.
More information about the Python-list
mailing list