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



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


Глава 10 • Файлы и исключения
break
second_number = input("Second number: ")
 
try:
answer = int(first_number) / int(second_number)
 
except ZeroDivisionError:
print("You can't divide by 0!")
 
else:
print(answer)
Программа пытается выполнить операцию деления в блоке 
try

, который 
включает только код, способный породить ошибку. Любой код, зависящий 
от успешного выполнения блока 
try
, добавляется в блок 
else
. В данном случае, 
если операция деления выполняется успешно, блок 
else
используется для вы-
вода результата 

.
Блок 
except
сообщает Python, как следует поступать при возникновении ошибки 
ZeroDivisionError

. Если при выполнении команды из блока 
try
происходит 
ошибка, связанная с делением на 0, программа выводит понятное сообщение, 
которое объясняет пользователю, как избежать подобных ошибок. Выполнение 
программы продолжается, и пользователь не сталкивается с трассировкой:
Give me two numbers, and I'll divide them. 
Enter 'q' to quit. 
First number: 
5
Second number: 
0
You can't divide by 0! 
First number: 
5
Second number: 
2
2.5 
First number: 
q
Блок 
try
-
except
-
else
работает так: Python пытается выполнить код в блоке 
try

В блоках 
try
следует размещать только тот код, при выполнении которого может 
возникнуть исключение. Иногда некоторый код должен выполняться только в том 
случае, если выполнение 
try
прошло успешно; такой код размещается в блоке 
else

Блок 
except
сообщает Python, что делать, если при выполнении кода 
try
произо-
шло определенное исключение. Заранее определяя вероятные источники ошибок, 
вы повышаете надежность своих программ, которые продолжают работать даже при 
вводе некорректных данных или при недоступности ресурсов. Ваш код оказывается 
защищенным от случайных ошибок пользователей и сознательных атак.
Обработка исключения FileNotFoundError
Одна из стандартных проблем при работе с файлами — отсутствие необходимых 
файлов. Тот файл, который вам нужен, может находиться в другом месте, в имени 
файла может быть допущена ошибка, или файл может вообще не существовать. 
Все эти ситуации достаточно прямолинейно обрабатываются в блоках 
try
-
except
.


Исключения
199
Попробуем прочитать данные из несуществующего файла. Следующая програм-
ма пытается прочитать содержимое файла с текстом «Алисы в Стране чудес», но 
я не сохранил файл 
alice .txt
в одном каталоге с файлом 
alice .py
:
alice.py
filename = 'alice.txt'
with open(filename) as f_obj:
contents = f_obj.read()
Прочитать данные из несуществующего файла нельзя, поэтому Python выдает 
исключение:
Traceback (most recent call last): 
File "alice.py", line 3, in  
with open(filename) as f_obj: 
FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt' 
В последней строке трассировки упоминается 
FileNotFoundError
: это исключение 
выдается в том случае, если Python не может найти открываемый файл. В данном 
примере функция 
open()
порождает ошибку, и, чтобы обработать ее, блок 
try
на-
чинается перед строкой с вызовом 
open()
:
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + " does not exist."
print(msg)
В этом примере код блока 
try
выдает исключение 
FileNotFoundError
, поэто-
му Python ищет блок 
except
для этой ошибки. Затем выполняется код этого 
блока, в результате чего вместо трассировки выдается доступное сообщение 
об ошибке:
Sorry, the file alice.txt does not exist.
Если файл не существует, программе больше делать нечего, поэтому код обработ-
ки ошибок почти ничего не добавляет в эту программу. Доработаем этот пример 
и посмотрим, как обработка исключений помогает при работе с несколькими 
файлами.
Анализ текста
Программа может анализировать текстовые файлы, содержащие целые книги. 
Многие классические произведения, ставшие общественным достоянием, доступны 
в виде простых текстовых файлов. Тексты, использованные в этом разделе, взяты 
с сайта проекта «Гутенберг» (
http://gutenberg.org/
). На этом сайте хранится под-


200

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




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

    Басты бет