Differences between revisions 13 and 16 (spanning 3 versions)
Revision 13 as of 2003-11-24 21:23:12
Size: 3281
Editor: ip503dabc3
Comment: response
Revision 16 as of 2003-12-20 08:00:57
Size: 2630
Editor: dsl254-010-130
Comment: Linked Wiki:ExceptionPatterns.
Deletions are marked like this. Additions are marked like this.
Line 46: Line 46:
== To Write About... == ''umm. that snippet doesn't actually catch all exceptions, though... here a more robust solution:''
Line 48: Line 48:
Give example of IOError, and interpreting the IOError code. {{{
#!python
import sys
try:
  untrusted.execute()
except: # catch *all* exceptions
  e = sys.exc_info()[1]
  write_to_page( "<p>Error: %s</p>" % e )
}}}
Line 50: Line 58:
Give example of multiple excepts. Handling multiple excepts in one line. == Finding Specific Exception Names ==
Line 52: Line 60:
Show how to use "else" and "finally". Standard exceptions that can be raised are detailed at:
Line 54: Line 62:
Show how to continue with a "raise".   http://python.org/doc/lib/module-exceptions.html

Look to class documentation to find out what exceptions a given class can raise.
Line 58: Line 68:
WritingExceptionClasses, TracebackModule, Wiki:CoupleLeapingWithLooking On this wiki: WritingExceptionClasses, TracebackModule.

For general (non-Python specific) ideas about exceptions, consult Wiki:ExceptionPatterns.

= To Write About... =

  * Give example of IOError, and interpreting the IOError code.
  * Give example of multiple excepts. Handling multiple excepts in one line.
  * Show how to use "else" and "finally".
  * Show how to continue with a "raise".
Line 62: Line 81:
Is there an easy way to find all of the exceptions, and parameters to the exceptions, that a class has? -- LionKimbro

I'm not sure what you mean. Do you want to know what exceptions a class can raise or what parameters an exception class can take when raised? -- JohannesGijsbers

Both, actually. I'm thinking: "I'm writing some code, and I want to be reasonably aware of things that could go wrong, that I might not think of otherwise. Then, I want to know the parameters for the exceptions, when I learn what could go wrong."

I can look up the "dict" builtin class in the Python manual, but it doesn't say, right there, that it emits the K''''''eyError. Now, you and I know about the K''''''eyError, but there are times when I need the exact word of the exception, and I want to know the parameters. So, where to people find it? Or is there just no such easy way to look up, yet? -- LionKimbro [[DateTime(2003-11-23T21:25:28Z)]]

Well, there's http://python.org/doc/lib/module-exceptions.html for all the standard exceptions that can be raised. As to what exceptions a class can raise, it should be in the documentation for that class, as it is for the dict: http://python.org/doc/current/lib/typesmapping.html, note 1. -- JohannesGijsbers
(none)

Handling Exceptions

The simplest way to handle exceptions is with a "try-except" block:

   1 (x,y) = (5,0)
   2 try:
   3   z = x/y
   4 except ZeroDivisionError:
   5   print "divide by zero"

If you wanted to examine the exception from code, you could have:

   1 (x,y) = (5,0)
   2 try:
   3   z = x/y
   4 except ZeroDivisionError, e:
   5   z = e # representation: "<exceptions.ZeroDivisionError instance at 0x817426c>"
   6 print z # output: "integer division or modulo by zero"

General Error Catching

Sometimes, you want to catch all errors that could possibly be generated, but usually you don't.In most cases, you want to be as specific as possible (CatchWhatYouCanHandle). In the first example above, if you were using a catch-all exception clause and a user presses Ctrl-C, generating a KeyboardInterrupt, you don't want the program to print "divide by zero".

However, there are some situations where it's best to catch all errors.

For example, suppose you are writing an extension module to a web service. You want the error information to output the output web page, and the server to continue to run, if at all possible. But you have no idea what kind of errors you might have put in your code.

In situations like these, you may want to code something like this:

   1 try:
   2   untrusted.execute()
   3 except Exception, e:
   4   write_to_page( "<p>Error: %s</p>" % str(e) )

MoinMoin software is a good example of where this is done. If you write MoinMoin extension macros, and trigger an error, MoinMoin will give you a detailed report of your error and the chain of events leading up to it.

umm. that snippet doesn't actually catch all exceptions, though... here a more robust solution:

   1 import sys
   2 try:
   3   untrusted.execute()
   4 except: # catch *all* exceptions
   5   e = sys.exc_info()[1]
   6   write_to_page( "<p>Error: %s</p>" % e )

Finding Specific Exception Names

Standard exceptions that can be raised are detailed at:

Look to class documentation to find out what exceptions a given class can raise.

See Also:

On this wiki: WritingExceptionClasses, TracebackModule.

For general (non-Python specific) ideas about exceptions, consult ExceptionPatterns.

To Write About...

  • Give example of IOError, and interpreting the IOError code.
  • Give example of multiple excepts. Handling multiple excepts in one line.
  • Show how to use "else" and "finally".
  • Show how to continue with a "raise".

Questions

(none)

HandlingExceptions (last edited 2024-03-05 20:29:39 by MatsWichmann)

Unable to edit the page? See the FrontPage for instructions.