2.13. Debugging¶
At this point, the syntax error you are most likely to make is an
illegal variable name, like class
and yield
,
which are keywords, or odd~job
and US$
, which contain illegal
characters.
If you put a space in a variable name, Python thinks it is two operands without an operator:
- NameError
- No, a NameError occurs when a variable is used before it is defined.
- SyntaxError
- This error comes from bad input.
- TypeError
- No, a TypeError occurs when an operation or function is applied to an object of inappropriate type.
- There will not be an error
- No, this will cause an error - see above for an example.
csp-10-2-2: Which error will you get if you name a variable “bad name”?
For syntax errors, the error messages don’t help much. The most common
messages are SyntaxError: invalid syntax
and
SyntaxError: invalid token
, neither of which is very
informative.
The runtime error you are most likely to make is a “use before def;” that is, trying to use a variable before you have assigned a value. This can happen if you spell a variable name wrong:
Variables names are case sensitive, so LaTeX
is not the
same as latex
.
At this point, the most likely cause of a semantic error is the order of
operations. For example, to evaluate 1/2pi
(which is .159), you might be tempted to write
But the division happens first, so you would get pi / 2
, which is not
the same thing! There is no way for Python to know what you meant to
write, so in this case you don’t get an error message; you just get the
wrong answer. Try adding parentheses to the code above to return the correct answer.
- NameError
- No, a NameError occurs when a variable is used before it is defined.
- SyntaxError
- No, a SyntaxError occurs when the program cannot understand a line of code.
- TypeError
- No, a TypeError occurs when an operation or function is applied to an object of inappropriate type.
- There will not be an error
- This will still compute, but will not return the expected result.
csp-10-2-6: Which error will you get if you use the equation 1/2*3.14 instead of 1/(2*3.14)?