Исключения
213
def count_words(filename):
...
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt',
'little_women.txt']
for filename in filenames:
count_words(filename)
Отсутствие
файла
siddhartha .txt
не влияет на выполнение программы:
The file alice.txt has about 29465 words.
Sorry, the file siddhartha.txt does not exist.
The file moby_dick.txt has about 215830 words.
The file little_women.txt has about 189079 words.
Использование блока
try
-
except
в данном примере предоставляет два важных
преимущества: программа ограждает пользователя от вывода трассировки и про-
должает выполнение, анализируя тексты, которые ей удается найти. Если бы в про-
грамме не перехватывалось исключение
FileNotFoundError
, инициированное из-за
отсутствия
siddhartha .txt
, то пользователь увидел бы полную трассировку, а работа
программы прервалась бы после попытки подсчитать слова в тексте «Сиддхартхи»;
до анализа «Моби Дика» или «Маленьких женщин» дело не дошло бы.
Ошибки
без уведомления пользователя
В предыдущем примере мы сообщили пользователю о том, что один из файлов ока-
зался недоступен. Тем не менее вы не обязаны сообщать о каждом обнаруженном
исключении. Иногда при возникновении исключения программа должна просто
проигнорировать сбой и продолжать работу, словно ничего не произошло. Для
этого блок
try
пишется так же, как обычно, но в блоке
except
вы явно приказыва-
ете Python не предпринимать никаких особых действий в случае ошибки. В языке
Python
существует команда
pass
, с которой блок ничего не делает:
def count_words(filename):
"""Подсчет приблизительного количества строк в файле."""
try:
...
except FileNotFoundError:
❶
pass
else:
...
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
count_words(filename)
Единственное отличие этого листинга от предыдущего — команда
pass
в точке
.
Теперь при возникновении ошибки
FileNotFoundError
выполняется код в блоке
except
, но при этом ничего не происходит. Программа не выдает данных трасси-
ровки и вообще никаких результатов, указывающих на возникновение ошибки.