В try произошла ошибка, а в finally тоже случилось исключение (например, при закрытии ресурса). Почему это плохо с точки зрения отладки?
AПлохо только из-за производительности, но на отладку это не влияет.
BНичего страшного: исключение из
finally автоматически игнорируется.CИсключение из
finally может «перекрыть» исходную ошибку, и станет сложнее понять первопричину по traceback.DЭто хорошо: вы увидите сразу два traceback, и отладка станет проще.
Правильный ответ. Если
finally падает, он может скрыть исходную причину падения и усложнить диагностику.Разбор
finally нужен для безопасной уборки. Если в нём есть код, который может упасть, вы рискуете потерять фокус на исходном исключении из try. В результате вместо первопричины в логах может доминировать ошибка из finally, и исправление станет дольше и дороже.
Проверь себя · 1/3разбор после ответа
Вы пишете функцию, которая внутри
try делает return, а в finally закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в finally при return из try?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных вы используете конструкцию `try`/`except`/`finally`. Внутри `try` происходит ошибка, она поймана в `except`. Что произойдёт с кодом в `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event["currency"]`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →