- Синтаксис использования try-except
- Варианты использования:
- Можно указать конкретный тип ошибки:
- Обработка нескольких исключений
- Обработка нескольких исключений в одном блоке
- Использование except без указания типа ошибки
- Использование else и finally
- Когда стоит использовать try-except в Python
- Когда НЕ нужно использовать try-except
Очень часто возникают ситуации, когда при нормальной работе нашего скрипта, программа «падает», т.е. возникает ошибка, или еще возникает исключение, что не есть хорошо, и в этом случае вы должны понимать как работает try except Python и использовать его.
Давайте подробнее разберем несколько ситуаций, когда желательно часть кода программы помещать в блок try except, и какую именно часть кода
- Чтение файла, который может отсутствовать:
Если программа должна открыть файл, но он может отсутствовать, без try-except возникнет ошибка FileNotFoundError, которая приведёт к сбою.
- Деление на ноль
Если код выполняет деление, но делитель может быть равен 0, это вызовет ZeroDivisionError.
- Преобразование строки в число
Если программа запрашивает число у пользователя, а тот введёт текст, будет ValueError.
- Запрос к API, который может не ответить
При работе с внешними сервисами (например, API) соединение может оборваться, что вызовет requests.exceptions.RequestException.
И во всех этих ситуациях, а также, других случаях, вы должны понимать как работает try except Python, давайте разбираться.
В Python блок try-except используется для обработки исключений (ошибок), которые могут возникнуть во время выполнения кода. Он позволяет программе продолжить выполнение, даже если произошла ошибка.
Синтаксис использования try-except
try:
# Код, который может вызвать исключение
x = 1 / 0
except ZeroDivisionError:
# Код, который выполняется при возникновении ошибки
print("Ошибка: деление на ноль")
Кстати, официальную документацию вы найдете здесь, а что бы посмотреть все существующие типы исключений, необходимо написать следующий код:
import builtins exceptions = [name for name in dir(builtins) if isinstance(getattr(builtins, name), type) and issubclass(getattr(builtins, name), BaseException)] print(exceptions)
Варианты использования:
Можно указать конкретный тип ошибки:
try:
num = int(input("Введите число: "))
except ValueError:
print("Ошибка: нужно ввести число")
Обработка нескольких исключений
try:
x = int(input("Введите число: "))
y = 10 / x
except ValueError:
print("Ошибка: введено не число")
except ZeroDivisionError:
print("Ошибка: деление на ноль")
Обработка нескольких исключений в одном блоке
try:
x = int(input("Введите число: "))
y = 10 / x
except (ValueError, ZeroDivisionError) as e:
print(f"Произошла ошибка: {e}")
Использование except без указания типа ошибки
try:
print(10 / 0)
except Exception as e:
print(f"Ошибка: {e}")
Да, так делать тоже можно, но не рекомендуется, так как понимание как работает try except Python это безусловно хорошо, но еще и важно понимать зачем он используется, кроме как обеспечить стабильную работу скрипта.
Использование else и finally
try:
f = open("file.txt", "r")
content = f.read()
except FileNotFoundError:
print("Файл не найден")
else:
print("Вы прочитали весь файл")
finally:
print("Закрываем файл")
Здесь необходимо помнить 2 простых правила:
- Код в блоке
elseотработает только в том случае, если выполнится код в блокеtry: - Код в блоке
finallyотрабатывает в любом случае.
Когда стоит использовать try-except в Python
1️⃣ Обработка ошибок при вводе данных (пользователь может ввести неверный формат)
2️⃣ Работа с файлами (файл может отсутствовать или быть недоступным)
3️⃣ Работа с сетью (HTTP-запросы, API) (проблемы с интернетом или сервером)
4️⃣ Математические вычисления (деление на ноль, переполнение)
5️⃣ Работа с базами данных (ошибки при подключении или запросах)
6️⃣ Обращение к несуществующим ключам в словарях
7️⃣ Работа с многопоточностью и асинхронными задачами (ошибки в одном потоке не должны ломать всю программу)
8️⃣ Конвертация типов данных (ошибка при преобразовании строки в число)
9️⃣ Динамическое выполнение кода (eval, exec) (ошибки в выполняемом коде)
🔟 Работа с внешними библиотеками (отсутствие нужного модуля)
Когда НЕ нужно использовать try-except
- Не перехватывай ошибки, если код должен сломаться.
Например, если ошибка указывает на проблему в логике программы. - Не используй except: без указания типа ошибки.
Это может скрыть реальные баги. Лучше перехватывать конкретные ошибки. - Не используй try-except для контроля потока программы.