How To Read A Traceback

A LOT of students just ignore this output - that is a *big* mistake as
it is a goldmine of information. Read and benefit from it (yes, it
looks ugly and intimidating, but really isn't).

Here is a typical traceback output (in red in the IDLE shell). Read it
carefully, it will have a lot of useful information for you: What is
causing the problem, and where exactly.


   Traceback (most recent call last):
     File "C:\Documents and Settings\cash_reg.py", line 99, in 
       main()
     File "C:\Documents and Settings\cash_reg.py", line 93, in main
       calc_tax_total()
     File "C:\Documents and Settings\cash_reg.py", line 70, in calc_tax_total
       return tax
     NameError: global name 'tax' is not defined


Let's take this apart:

The *last line* will show the actual problem that caused the crash:


     NameError: global name 'tax' is not defined


I.e., there is a problem with something named "tax" that was being
used but was not defined - a good guess would be that 'tax' is a
variable of some sort.

In fact, if you look at the line above


     File "C:\Documents and Settings\cash_reg.py", line 70, in calc_tax_total
        return tax


you can see that there is a "return tax" statement on line 70 in
method calc_tax_total -- that is a lot of information to pinpoint
where the suspect code is executing.

If you move up the traceback, you will see where each method was in
turn called. So method calc_tax_total was called on line 93 in method
main() and main in turn was called on line 99 in your source
code cash_reg.py.

All this information is there for those willing to read it, and should
help you get a fix on your problem.

Aside: In Java there is almost the same mechanism if there is a
       program crash, so reading tracebacks is a useful skill not just
       for Python.