So you now have the perfect program, it runs flawlessly, except for one detail. It will crash on invalid user input. Have no fear, for Python has a special control structure for you. It's called
try and it tries to do something. Here is an example of a program with a problem:
print("Type Control C or -1 to exit") number = 1 while number != -1: number = int(input("Enter a number: ")) print("You entered: ", number)
Notice how when you enter
@#& it outputs something like:
Traceback (most recent call last): File "notry.py", line 8, in <module> number = int(input("Enter a number: ")) ValueError: invalid literal for int() with base 10: '@#&'
As you can see, the
int function is unhappy with the number
@#& (as well it should be). The last line shows what the problem is; Python found a
ValueError. How can our program deal with this? What we do is first: put the place where the errors occurs in a
try block, and second: tell Python how we want
ValueErrors handled. The following program does this:
print("Type Control C or -1 to exit") number = 1 while number != -1: try: number = int(input("Enter a number: ")) print("You entered: ", number) except ValueError: print("That was not a number")
Now when we run the new program and give it
@#& it tells us “That was not a number.” and continues with what it was doing before.
When your program keeps having some error that you know how to handle, put code in a
try block, and put the way to handle the error in the
Update at least the phone numbers program so it doesn't crash if a user doesn't enter any data at the menu.