471,338 Members | 1,156 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,338 software developers and data experts.

How can I obtain the exception object on a generlized except statement?

I am confused on one aspect of exception handling. If you specify the
exception object type to match in an except statement it is possible
to also obtain the exception object itself, but I can't figure out how
to get the exception object when I don't specify a match.

for example:
>>try: urlopen('http://www.google.com')
except socket.error, msg:
print str(msg)
this works and I can do what I like with the exception object (msg).
but I can't do this with a simple except statment.
>>except msg:
this won't work because it will think msg is the type to match
>>except ,msg:
syntax error
>>except *,msg:
syntax error
>>except (),msg:
Hmm I didn't try that one before I started this post. It doesn't give
me a syntax error. I'll experiment.
Even if the above syntax works, is this the way to do this? It seems
sort of funky.

How do I do this? Thanks.

Jun 10 '07 #1
4 1164
Chris Allen schrieb:
I am confused on one aspect of exception handling. If you specify the
exception object type to match in an except statement it is possible
to also obtain the exception object itself, but I can't figure out how
to get the exception object when I don't specify a match.

for example:
>>>try: urlopen('http://www.google.com')
except socket.error, msg:
print str(msg)

this works and I can do what I like with the exception object (msg).
but I can't do this with a simple except statment.
>>>except msg:

this won't work because it will think msg is the type to match
>>>except ,msg:

syntax error
>>>except *,msg:

syntax error
>>>except (),msg:

Hmm I didn't try that one before I started this post. It doesn't give
me a syntax error. I'll experiment.
Even if the above syntax works, is this the way to do this? It seems
sort of funky.

How do I do this? Thanks.
pydoc sys.exc_info
Diez
Jun 10 '07 #2
On Jun 10, 10:13 pm, "Diez B. Roggisch" <d...@nospam.web.dewrote:
Chris Allen schrieb:
I am confused on one aspect of exception handling. If you specify the
exception object type to match in an except statement it is possible
to also obtain the exception object itself, but I can't figure out how
to get the exception object when I don't specify a match.
for example:
>>try: urlopen('http://www.google.com')
except socket.error, msg:
print str(msg)
this works and I can do what I like with the exception object (msg).
but I can't do this with a simple except statment.
>>except msg:
this won't work because it will think msg is the type to match
>>except ,msg:
syntax error
>>except *,msg:
syntax error
>>except (),msg:
Hmm I didn't try that one before I started this post. It doesn't give
me a syntax error. I'll experiment.
Even if the above syntax works, is this the way to do this? It seems
sort of funky.
How do I do this? Thanks.

pydoc sys.exc_info
In particular, you want sys.exc_info()[:2]


Jun 10 '07 #3
Just what I was looking for thanks Diez and John.

Jun 10 '07 #4
Chris Allen <ca******@gmail.comwrote:
I am confused on one aspect of exception handling. If you specify the
exception object type to match in an except statement it is possible
to also obtain the exception object itself, but I can't figure out how
to get the exception object when I don't specify a match.
In most cases you can just catch Exception. If you want to be sure to
catch deprecated string exceptions also then use sys.exc_info().

try:
... something ...
except Exception, e:
print e

Also what you want to do with it when you've caught it makes a
difference:

If you are planning on logging a stack backtrace then you'll want the
traceback as well as the exception, so sys.exc_info() might be indicated
except that in that case you'll be better off using logging.exception()
instead.

try:
... something ...
except:
logging.exception("Unexpected error")

If you are just planning on swallowing the exception then you don't want
any of these: you want to catch the specific exceptions that you expect
to be raised.
>except (),msg:
Using an empty tuple for the exception specification won't catch any
exceptions. Not very useful if the tuple is a literal, but it could be
useful in some obscure situations (e.g. an except clause to handle
exceptions declared in a specific DLL which might not always be
present).
Jun 11 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by StepH | last post: by
13 posts views Thread by Aggelos I. Orfanakos | last post: by
2 posts views Thread by William Payne | last post: by
2 posts views Thread by pegazik | last post: by
6 posts views Thread by Charles Law | last post: by
2 posts views Thread by crybaby | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.