next up previous contents
Далее: Заключение Наверх: Курс языка Python для начинающих Назад: Работа с файлами   Содержание

В этой главе

Что делать с вещами, далекими от идеала (обработка ошибок)

Предположим, у вас есть идеальная программа, которая работает безотказно, за исключением одной мелочи: она ломается при неправильном пользовательском вводе. Не бойтесь, для этого случая в 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).


next up previous contents
Далее: Заключение Наверх: Курс языка Python для начинающих Назад: Работа с файлами   Содержание
Джош Коглиати jjc@honors.montana.edu Версия Wikibooks: Курс языка Python Для начинающих на Wikibooks