Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 5075 / 565 | Длительность: 21:48:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 2:

Условное выполнение

< Самостоятельная работа 1 || Самостоятельная работа 2: 123

5.7. Перехват исключений с использованием try и except

Ранее мы рассматривали код, где использовались функции raw_input и int. Мы также видели их ненадежное исполнение:

>>> speed = raw_input(prompt)
What...is the airspeed velocity of an unladen swallow?
What do you mean, an African or a European swallow?
>>> int(speed)
ValueError: invalid literal for int()
>>>

Когда мы запускали эти инструкции в интерпретаторе Python, то получали строку приглашения, затем набирали наш текст.

Пример простой программы, которая переводит температуру по Фаренгейту в температуру по Цельсию:

inp = raw_input('Enter Fahrenheit Temperature:')
fahr = float(inp)
cel = (fahr - 32.0) * 5.0 / 9.0
print cel

Если мы запустим этот код и введем некорректные данные, то получим недружелюбное сообщение об ошибке:

Enter Fahrenheit Temperature:72
22.2222222222
Enter Fahrenheit Temperature:fred
Traceback (most recent call last):
File "fahren.py", line 2, in <module>
fahr = float(inp)
ValueError: invalid literal for float(): fred

Существует структура условного выполнения, встроенная в Python, которая обрабатывает эти типы ожидаемых и неожиданных ошибок, она называется "try / except". Идея try и except заключается в следующем: вы знаете, что некоторая последовательность инструкций может иметь проблемы, и вы хотите добавить некоторые инструкции, которые бы выполнялись в случае возникновения ошибки. Эти дополнительные инструкции (блок except) игнорируются, если ошибок не произошло.

Вы можете представить try и except как страховой полис для последовательности инструкций.

Перепишем нашу программу о температуре следующим образом:

inp = raw_input('Enter Fahrenheit Temperature:')
try:
       fahr = float(inp)
       cel = (fahr - 32.0) * 5.0 / 9.0
       print cel
except:
       print 'Please enter a number'

Python начинает выполнение с последовательности инструкций в блоке try. Если все выполняется без ошибок, то блок except пропускается. Если произошло исключение (exception) в блоке try, то Python покидает блок try и выполняет последовательность инструкций внутри блока except.

Enter Fahrenheit Temperature:72
22.2222222222


Enter Fahrenheit Temperature:fred
Please enter a number

Обработка исключения с помощью инструкции try называется перехватом (catching) исключения. В рассмотренном примере, блок except выводит на экран сообщение об ошибке. В общем, перехват исключения предоставляет вам шанс решить проблему, попытаться заново или хотя бы красиво завершить работу программы.

5.10. Словарь

Тело (body): последовательность инструкций в составной инструкции.

Логическое выражение (boolean expression): выражение, значением которого может быть либо True, либо False.

Ветка (branch): одна из возможных последовательностей инструкций в условной инструкции.

Цепочное условие (chained conditional): условная инструкция с несколькими возможными ветками.

Оператор сравнения (comparison operator): один из операторов, который сравнивает операнды: ==, !=, >, <, >= и <=.

Условная инструкция (conditional statement): инструкция, которая контролирует поток выполнения в зависимости от некоторого условия.

Условие (condition): логическое выражение в условной инструкции, которое определяет, какая ветка выполнится.

Составная инструкция (compound statement): инструкция, которая содержит заголовок и тело. Заголовок заканчивается (:). Тело смещается относительно заголовка.

Логический оператор (logical operator): один из операторов, которые объединяют логические выражения: and, or и not.

Вложенное условие (nested conditional): условная инструкция, которая встречается в одной из веток другой условной инструкции.

< Самостоятельная работа 1 || Самостоятельная работа 2: 123
Ксения Шошина
Ксения Шошина

курс Программирование на Python

Илья Кизилов
Илья Кизилов

В лекции приводится программа для сортировки слов по их длинне. В коде ошибка. Я исправил так:

def sort_by_length(words):

words = words.split()

t = []

for word in words:

t.append((len(word), word))

t.sort(reverse=True)

res = []

for length, word in t:

res.append(word)

return res

print(sort_by_length(words))

 

Кто ещё как сделал?

 

Харламп Бикс
Харламп Бикс
Россия
Фергус Сополов
Фергус Сополов
Россия