Книга «Изучаем Python»



Pdf көрінісі
бет123/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   119   120   121   122   123   124   125   126   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 10 • Файлы и исключения
Использование блока 
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
, но при этом ничего не происходит. Программа не выдает данные трасси-
ровки и вообще никакие результаты, указывающие на возникновение ошибки. 
Пользователи получают данные о количестве слов во всех существующих файлах, 
однако ничто не сообщает о том, что какой-то файл не был найден:
The file alice.txt has about 29461 words. 
The file moby_dick.txt has about 215136 words. 
The file little_women.txt has about 189079 words.
Команда 
pass
также может служить временным заполнителем. Она напоминает, 
что в этот конкретный момент выполнения вашей программы вы решили ниче-
го не предпринимать, хотя, возможно, сделаете что-то позднее. Например, эта 
программа может записать все имена отсутствующих файлов в файл с именем 
missing_files .txt
. Пользователи этот файл не увидят, но создатель программы сможет 
прочитать его и разобраться с отсутствующими текстами.


Исключения
203
О каких ошибках нужно сообщать?
Как определить, в каком случае следует сообщить об ошибке пользователю, а когда 
можно просто проигнорировать ее незаметно для пользователя? Если пользователь 
знает, с какими текстами должна работать программа, вероятно, он предпочтет по-
лучить сообщение, объясняющее, почему некоторые тексты были пропущены при 
анализе. Пользователь ожидает увидеть какие-то результаты, но не знает, какие 
книги должны быть проанализированы? Возможно, ему и не нужно знать о недо-
ступности каких-то файлов. Лишняя информация только сделает вашу программу 
менее удобной для пользователя. Средства обработки ошибок Python позволяют 
достаточно точно управлять тем, какой объем информации следует предоставить 
пользователю.
Хорошо написанный, правильно протестированный код редко содержит внутрен-
ние ошибки (например, синтаксические или логические). Но в любой ситуации, 
в которой ваша программа зависит от внешних факторов (пользовательского ввода, 
существования файла, доступности сетевого подключения), существует риск воз-
никновения исключения. С накоплением практического опыта вы начнете видеть, 
в каких местах программы следует разместить блоки обработки исключений 
и сколько информации предоставлять пользователям о возникающих ошибках.


Достарыңызбен бөлісу:
1   ...   119   120   121   122   123   124   125   126   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет