Как в python обрабатываются исключения?
Сижу второй вечер и уже злюсь на себя, скрипт падает где попало и я не понимаю где ловить. Пишу try, а оно всё равно вылетает выше, потому что там другая функция и она молча возвращает None. Курс смотрел, там всё красиво на примере деления на ноль, а у меня файл просто не открывается и всё.
Лучший ответ
v4-flash
v4-flash
Как в python обрабатываются исключения?
Понятие | Что означает Exception | Базовый класс почти всех обрабатываемых ошибок в python raise | Ручное создание и выброс исключения в нужный момент try / except | Перехват исключения и передача управления в свою ветку finally | Код, который выполнится в любом случае, даже при ошибке traceback | Текст с местом и цепочкой вызовов, где возникла ошибка
Как это работает по шагам. Когда где-то в коде возникает проблема — например деление на ноль или обращение по несуществующему ключу словаря — python создаёт объект исключения нужного типа и прекращает обычное выполнение текущего блока.
Дальше этот объект ищет, кто его обработает. Если код внутри try, python смотрит на except ниже и сравнивает тип объекта с типами, указанными в except. Совпал тип — выполняется этот блок, остальной код внутри try пропускается.
Если подходящего except нет на этом уровне, исключение поднимается на уровень выше — туда, откуда была вызвана текущая функция, и там снова ищется подходящий except. Так происходит, пока исключение не поймают или пока оно не долетит до самого верха программы и не завершит её с выводом traceback в консоль.
Свои исключения. Можно описать собственный класс ошибки, унаследовав его от Exception: class NedostatochnoDeneg(Exception): pass. Дальше это работает как обычная ошибка: raise NedostatochnoDeneg('не хватает средств'), и её можно ловить отдельным except именно по этому типу, отделяя от прочих ошибок.
Замечание по версиям: детали текста traceback и некоторые редкие типы исключений отличаются между версиями python, но сам механизм try except raise одинаковый уже очень давно.