Предположим, у вас есть идеальная программа, которая работает безотказно, за исключением одной мелочи: она ломается при неправильном пользовательском вводе. Не бойтесь, для этого случая в Python существует специальная структура управления. Она называется try и обычно что-то делает в ситуациях, подобных описанной. Пример проблемы в программе:
print "Type Control C or -1 to exit" number = 1 while number != -1: number = int(raw_input("Enter a number: ")) print "You entered: ",number
Заметьте, если вы введете @#&, она выдаст нечто вроде:
Traceback (innermost last): File "try_less.py", line 4, in ? number = int(raw_input("Enter a number: ")) ValueError: invalid literal for int(): @#&
Как видите, функции int не понравилось число @#& (и совершенно справедливо). Последняя строка показывает, в чем проблема: Python обнаружил ValueError (ошибка значения). Что можно с этим сделать? Делаем следующее: первое, помещаем место, где происходит ошибка, в блок try; второе, указываем, как обработать ошибку ValueError. Следующая программа делает это.
print "Type Control C or -1 to exit" number = 1 while number != -1: try: number = int(raw_input("Enter a number: ")) print "You entered: ",number except ValueError: print "That was not a number."
Если мы сейчас запустим программу и введем @#&, она выдаст: “That was not a number.” и продолжит свою работу.
Если в вашей программе постоянно появляется ошибка, и вы знаете, как ее обработать, поместите проблемное место в блок try и поместите обработку ошибки в блок except.
Улучшите программу телефонных номеров, чтобы она была в состоянии продолжить работу, если пользователь не ввел никаких данных в пользовательском меню (на запрос был просто нажат Enter).