- Синтаксис использования 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 для контроля потока программы.