М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет154/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   150   151   152   153   154   155   156   157   ...   334
Байланысты:
Изучаем Python

word_count.py
def count_words(filename):
❶ """Подсчет приблизительного количества строк в файле."""
try:
with open(filename,encoding='utf-8') as f:
contents = f.read()
except FileNotFoundError:
print(f"Sorry, the file {filename} does not exist.")
else:
words = contents.split()
num_words = len(words)
print(f"The file {filename} has about {num_words} words.")
filename = 'alice.txt'
count_words(filename)
Большая часть кода не изменилась. Мы просто снабдили код отступом и переме-
стили его в тело 
count_words()
. При внесении изменений в программу желательно 
обновлять комментарии, поэтому мы преобразовали комментарий в строку доку-
ментации и слегка переформулировали его 

.
Теперь мы можем написать простой цикл для подсчета слов в любом тексте, 
который нужно проанализировать. Для этого имена анализируемых файлов со-
храняются в списке, после чего для каждого файла в списке вызывается функция 
count_words()
. Мы попробуем подсчитать слова в «Алисе в Стране чудес», «Сидд-
хартхе», «Моби Дике» и «Маленьких женщинах» — все эти книги распространя-
ются в свободном доступе. Я намеренно не стал копировать файл 
siddhartha .txt
в каталог с программой 
word_count .py
, чтобы выяснить, насколько хорошо наша 
программа справляется с отсутствием файла:


Исключения
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
, но при этом ничего не происходит. Программа не выдает данных трасси-
ровки и вообще никаких результатов, указывающих на возникновение ошибки. 


214

Достарыңызбен бөлісу:
1   ...   150   151   152   153   154   155   156   157   ...   334




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

    Басты бет