In this chapter, we will cover errors, exceptions, and how to find and fix them. Handling exceptions is an important part of writing reliable and usable code. We will introduce the basic built-in exceptions and show how to use and treat exceptions. We'll introduce debugging and show you how to use the built-in Python debugger.
You're reading from Scientific Computing with Python 3
One error programmers (even experienced ones) find is when code has incorrect syntax, meaning that the code instructions are not correctly formatted.
Consider an example of Syntax error:
>>> for i in range(10) File “<stdin>”, line 1 for i in range(10) ^ SyntaxError: invalid syntax
The error occurs because of a missing colon at the end of the for
declaration. This is an example of an exception being raised. In the case of SyntaxError
, it tells the programmer that the code has incorrect syntax and also prints the line where the error occurred, with an arrow pointing to where in that line the problem is.
Exceptions in Python are derived (inherited) from a base class called Exception
. Python comes with a number of built-in exceptions. Some common exception types are listed in Table 10.1, (for full list of built-in exceptions refer to [38]).
Here are two common examples of exceptions. As you might expect, ZeroDivisionError...
Errors in software code are sometimes referred to as bugs. Debugging is the process of finding and fixing bugs in code. This process can be performed at varying degrees of sophistication. The most efficient way is to use a tool called debugger. Having unittests in place is a good way to identify errors early, refer section Using unittest of Chapter 13, Testing. When it is not obvious where or what the problem is, a debugger is very useful.
There are typically two kinds of bugs:
- An exception is raised and not caught.
- The code does not function properly.
The first case is usually easier to fix. The second can be more difficult as the problem can be a faulty idea or solution, a faulty implementation, or a combination of the two.
We are only concerned with the first case in what follows, but the same tools can be used to help find why the code does not do what it is supposed to.
The key concepts in this chapter were exceptions and errors. We showed how an exception is raised to be later in another program unit caught. You can define your own exceptions and equip them with messages and current values of given variables.
Code may return unexpected results without throwing an exception. The technique to localize the source of the erroneous result is called debugging. We introduced debugging methods and hopefully encouraged you to train them so that you have them readily available when needed. The need for serious debugging comes sooner than you might expect.