As we saw in our earliest conversations with Python, we must communicate very precisely when we write Python code. The smallest deviation or mistake will cause Python to give up looking at your program.
Beginning programmers often take the fact that Python leaves no room for errors as evidence that Python is mean, hateful, and cruel. While Python seems to like everyone else, Python knows them personally and holds a grudge against them. Because of this grudge, Python takes our perfectly written programs and rejects them as โunfitโ just to torment us.
>>> primt 'Hello world!'
File "<stdin>", line 1
primt 'Hello world!'
^
SyntaxError: invalid syntax
>>> primt ('Hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'primt' is not defined
>>> I hate you Python!
File "<stdin>", line 1
I hate you Python!
^
SyntaxError: invalid syntax
>>> if you come out of there, I would teach you a lesson
File "<stdin>", line 1
if you come out of there, I would teach you a lesson
^
SyntaxError: invalid syntax
>>>
There is little to be gained by arguing with Python. It is just a tool. It has no emotions and it is happy and ready to serve you whenever you need it. Its error messages sound harsh, but they are just Pythonโs call for help. It has looked at what you typed, and it simply cannot understand what you have entered.
Python is much more like a dog, loving you unconditionally, having a few key words that it understands, looking you with a sweet look on its face (>>>), and waiting for you to say something it understands. When Python says โSyntaxError: invalid syntaxโ, it is simply wagging its tail and saying, โYou seemed to say something but I just donโt understand what you meant, but please keep talking to me (>>>).โ
These are the first errors you will make and the easiest to fix. A syntax error means that you have violated the โgrammarโ rules of Python. Python does its best to point right at the line and character where it noticed it was confused. The only tricky bit of syntax errors is that sometimes the mistake that needs fixing is actually earlier in the program than where Python noticed it was confused. So the line and character that Python indicates in a syntax error may just be a starting point for your investigation.
A logic error is when your program has good syntax but there is a mistake in the order of the statements or perhaps a mistake in how the statements relate to one another. A good example of a logic error might be, โtake a drink from your water bottle, put it in your backpack, walk to the library, and then put the top back on the bottle.โ
A semantic error is when your description of the steps to take is syntactically perfect and in the right order, but there is simply a mistake in the program. The program is perfectly correct but it does not do what you intended for it to do. A simple example would be if you were giving a person directions to a restaurant and said, โโฆwhen you reach the intersection with the gas station, turn left and go one mile and the restaurant is a red building on your left.โ Your friend is very late and calls you to tell you that they are on a farm and walking around behind a barn, with no sign of a restaurant. Then you say โdid you turn left or right at the gas station?โ and they say, โI followed your directions perfectly, I have them written down, it says turn left and go one mile at the gas station.โ Then you say, โI am very sorry, because while my instructions were syntactically correct, they sadly contained a small but undetected semantic error.โ.
A runtime error is a type of error that occurs when the program is syntactically correct, but something goes wrong while the program is running that causes it to stop immediately, or "crash". For example, if you have a program that asks the user for a number that is used to divide another number, and the user enters 0, it causes the program to crash because division by zero is not defined mathematically.
Another example is trying to add a number and a string. For example, the statement total = 20 + "five" is syntactically correct, so Python is able to parse the code. However, when Python attempts to run this statement, it does not know how to add a number and a string together, so the program stops with an error.
Runtime errors differ from syntax errors because Python cannot detect them until the program is actually running. When a runtime error occurs, Python displays an error message that includes the name of the error. Common examples are ValueError, TypeError, and NameError. You will learn more about these in later chapters.