In this concluding article of the Python 101 series, find out howto use Python's exception-handling routines to trap and resolve programerrors, learn to generate and use custom error messages, and get acquainteda bunch of useful (and free!) Python resources online.
No developer, no matter how good (s)he is, writes bug-free code all thetime. Which is why most programming languages - including Python - comewith built-in capabilities to catch errors and take remedial action. Thisaction could be something as simple as displaying an error message, or ascomplex as heating your computer's innards until they burst into flame(just kidding!)
Normally, when a Python program encounters an error, be it syntactical orlogical, it exits the program at that stage itself with a messageindicating the cause of the error. Now, while this behaviour is acceptableduring the development phase, it cannot continue once a Python program hasbeen released to actual users. In these "live" situations, it isunprofessional to display cryptic error messages (which are usuallyincomprehensible to non-technical users); rather, it is more professionalto intercept these errors and either resolve them (if resolution ispossible), or notify the user with a clear error message (if not).
The term "exceptions" refers to those errors which can be tracked andcontrolled. For example, if a function attempts an unsupported operation ona built-in Python object (say, modifying an immutable object), Python willgenerate a "TypeError" exception, together with a stack trace or detailedexplanation of the problem. Exceptions like these can be caught by theapplication, and appropriately diverted to an exception-handling routine.
An example might make this clearer. Consider the following Python program,
#!/usr/bin/python
# set up tuple
dessert = ('apple pie', 'chocolate fudge cake', 'icecream')
# change tuple value
dessert[1] = 'chocolate brownies'
which generates a TypeError because I'm trying to modify a tuple.
Traceback (innermost last):
File "dessert.py", line 5, in ?
dessert[1] = 'chocolate brownies'
TypeError: object doesn't support item assignment
Now, let's add some code to trap and handle the exception gracefully.
#!/usr/bin/python
try:
# try running this code
dessert = ('apple pie', 'chocolate fudge cake', 'icecream')
dessert[1] = 'chocolate brownies'
except TypeError:
# if error, do this...
print "Whoops! Something bad just happened. Terminating script."
And this time, when the script is executed, it will not generate aTypeError - instead, it will output
Whoops! Something bad just happened. Terminating script.
This is a very basic example of how Python exceptions can be trapped, andappropriate action triggered. As you will see, the ability to handle errorsin a transparent manner throws open some pretty powerful possibilities...