Differences between revisions 5 and 6
 ⇤ ← Revision 5 as of 2003-11-21 22:15:43 → Size: 989 Editor: dsl254-010-130 Comment: Catch-all is bad, but how to do it anyways. (to-do.) ← Revision 6 as of 2003-11-22 00:01:59 → ⇥ Size: 1227 Editor: ip503dabc3 Comment: catch-all bad! ;) Deletions are marked like this. Additions are marked like this. Line 26: Line 26: This page previously used a catch-all exception clause:{{{#!python(x,y) = (5,0)try:  z = x/yexcept:  print "divide by zero"}}}This is bad because you'll almost certainly catch too many errors. As a simple example, when the user presses Ctrl-C, thus generating a KeyboardInterrupt, it will be caught and the code above will print "divide by zero". Now that's confusing! Line 31: Line 44: Catch-all "Exception" exception handling. (Note: JohannesGijsbers says this is ''bad.'' We should have a note about why it's bad, next to how to do it.)

# 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"
```

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

This is bad because you'll almost certainly catch too many errors. As a simple example, when the user presses Ctrl-C, thus generating a KeyboardInterrupt, it will be caught and the code above will print "divide by zero". Now that's confusing!

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".

HandlingExceptions (last edited 2020-09-14 13:35:48 by MatsWichmann)

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