[Tutor] Exception Handling and Stack traces
Peter Otten
__peter__ at web.de
Fri Sep 10 16:42:35 CEST 2010
Michael Powe wrote:
> On Fri, Sep 10, 2010 at 03:56:51PM +0200, Peter Otten wrote:
>> Michael Powe wrote:
>>
>> > I can't work out how to suppress stacktrace printing when exceptions
>> > are thrown.
>>
>> [snip rant]
>>
>> It might have been a good idea to read a tutorial like
>>
>> http://docs.python.org/tutorial/errors.html#handling-exceptions
>
>> or ask before you got annoyed enough to write that rant ;)
>
> Hello,
>
> Thanks for the reply. Stupid me, I just read a half dozen articles on
> the web about python exception handling, including some at
> docs.python. At no point is the 'as' clause discussed as being
> required.
>> WRONG:
>>
>> >>> try:
>> ... 1/0
>> ... except ZeroDivisionError("whatever"):
>> ... print "caught"
>> ...
>> Traceback (most recent call last):
>> File "<stdin>", line 2, in <module>
>> ZeroDivisionError: integer division or modulo by zero
>>
>> CORRECT:
>>
>> >>> try:
>> ... 1/0
>> ... except ZeroDivisionError as e:
>> ... print "caught", e
>> ...
>> caught integer division or modulo by zero
> Note that in section 8.3 of that article, the statement is made that
> if the exception matches the the exception type in the following
> format, the statements within the except clause are executed.
>
> except URLError :
> # do something
>
> That in fact, seems to me to be incorrect. It is not my experience
> (e.g., print statements are not executed in the example I gave and the
> sys.exit() is not called).
Sorry, the as-clause is *not* necessary. The relevant difference between the
correct and the wrong approach is that you must not instantiate the
exception:
WRONG:
>>> try:
... 1/0
... except ZeroDivisionError("whatever"):
... print "caught"
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
CORRECT:
>>> try:
... 1/0
... except ZeroDivisionError:
... print "caught"
...
caught
I just put in the as-clause to show an easy way to print the exception. I
did not anticipate that it would obscure the message.
Peter
More information about the Tutor
mailing list