При написании программ мы часто сталкиваемся с ситуациями, когда нормальный поток выполнения программы должен быть изменен из-за некоторых условий. Python предоставляет нам механизмы для обработки таких ситуаций с помощью исключений. Исключения — это события, которые могут изменить поток управления в программе. В Python вы можете вручную вызвать исключение в любой точке вашей программы, используя оператор raise.
Вот простой пример использования оператора raise:
x = -1
if x < 0:
# вызываем исключение, если x отрицательный
raise Exception('x не должен быть отрицательным')
В этой программе, если значение x меньше 0, генерируется исключение типа Exception с сообщением "x не должен быть отрицательным". Если вы запустите эту программу, она остановится на операторе raise и выведет сообщение об исключении, вот так:
Exception: x не должен быть отрицательным
Помимо Exception, в Python есть несколько встроенных исключений, которые вы можете использовать для генерации более конкретных типов ошибок. Вот как вы можете вызвать ValueError:
def sqrt(n):
if n < 0:
# вызываем ValueError, если n отрицательное
raise ValueError('Квадратный корень не определен для отрицательных чисел')
return n ** 0.5
print(sqrt(4)) # 2.0
print(sqrt(-1)) # ValueError: Квадратный корень не определен для отрицательных чисел
В этом примере функция sqrt(n) пытается вычислить квадратный корень числа n. Однако, если n отрицательное, она вызывает ValueError с конкретным сообщением.
Обратите внимание, что когда вы вызываете исключение с помощью raise, поток программы прерывается. Это часто является желаемым поведением, так как позволяет сигнализировать о том, что произошло что-то неожиданное, с чем программа не может справиться. Конкретный тип исключения и сообщение предоставляют больше информации о характере ошибки.
Задание: Чтение файла
В крупной софтверной компании есть несколько файлов кода в каталоге. Вас попросили написать функцию на Python, которая открывает файл и возвращает его содержимое. Однако она должна также обрабатывать случаи, когда файл не существует.
Вход функции — имя файла.
Функция должна читать и возвращать содержимое файла. В случае, когда файл не существует, она должна вызывать FileNotFoundError.