Как обрабатывать исключения в Python (попробуйте, кроме, наконец)
Узнайте, как обрабатывать исключения в Python с помощью блоков try, кроме, else иfinally. Пишите безошибочный и устойчивый к сбоям код Python.
Обзор
Надежное программное обеспечение должно быть готово к работе с непредвиденными ситуациями, такими как отсутствие файлов, неправильный ввод данных пользователем, сбои базы данных или сбои в работе сети. Когда в Python возникает ошибка, возникает исключение. Если их не обработать, исключения немедленно останавливают вашу программу и печатают стек трассировки.
Основным инструментом Python для управления ошибками во время выполнения является блок Try-Exception. Вы помещаете код, который может вызвать ошибку, внутри блока Try и определяете код обработки ошибок внутри одного или нескольких блоковException. Настоятельно рекомендуется указывать точный класс исключений (например, ValueError или ZeroDivisionError), поскольку перехват всех общих исключений («кроме:») может маскировать ошибки.
Чтобы сделать поток исключений более выразительным, Python предоставляет два дополнительных блока: else иfinally. Блок else выполняется только в том случае, если в блоке try не возникло никаких исключений, что полезно для кода, который должен выполняться только в случае успеха. Блок `finally` выполняется *всегда*, независимо от того, произошло ли исключение, что делает его идеальным местом для очистки, например закрытия файлов или подключений к базе данных.
Код и вывод выполнения
Этот сценарий демонстрирует надежную обработку ошибок в Python с использованием try, кроме, else и наконец.
def divide_numbers(a, b):
try:
# Code that might raise an exception
result = a / b
except ZeroDivisionError:
# Handling a specific exception
print("Error: Cannot divide by zero!")
except TypeError:
# Handling another exception type
print("Error: Inputs must be numbers!")
else:
# Run only if try block succeeded
print(f"Success! Result of {a}/{b} is {result}")
finally:
# Runs no matter what
print("Division attempt completed.")
divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.Пошаговая реализация
- Поместите код, который может привести к сбою, внутри блока try.
- Отлавливайте определенные типы ошибок с помощью исключений ExceptionType: для корректной обработки сбоев.
- Используйте else для кода, который должен выполняться только в случае успешных блоков попытки.
- Используйте наконец, чтобы гарантировать выполнение действий по очистке независимо от ошибок.
Часто задаваемые вопросы
Могу ли я перехватить несколько исключений в одном блоке исключений?
Да, вы можете передать их как кортеж: кроме (ValueError, TypeError) как e:.
Как мне создать свои собственные исключения?
Используйте ключевое слово raise, за которым следует экземпляр исключения: поднять ValueError("Недопустимое значение конфигурации").
Связанные темы
Узнайте, как преобразовать строку в целое число в Python с помощью функции int(). Безопасно обрабатывайте ошибки и преобразуйте числа из двоичного, восьмеричного или шестнадцатеричного формата.
Как прочитать файл на PythonУзнайте, как читать файлы на Python. Освойте оператор open, readline, readlines и безопасную обработку исключений файлов.
Как записать в файл на PythonУзнайте, как записывать текст в файлы на Python. Освойте разницу между режимами записи («w») и добавления («a») с помощью безопасных контекстных менеджеров.
Рекомендуемые ресурсы Python
Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.
Циклы Python
Узнайте, как использовать циклы Python для перебора данных. Освойте циклы for, while, прерывание, продолжение и лучшие практики работы с циклами с помощью интерактивных примеров.
Шпаргалка по строковым методам Python
Полное справочное руководство по манипулированию строками в Python. Мастер форматирования, поиска, разделения, замены и проверки свойств строк.
Python против JavaScript: какой язык программирования лучше?
Всестороннее сравнение Python и JavaScript. Изучите синтаксические различия, производительность, варианты использования (серверная и клиентская части) и примеры кодирования.