В блоке try произошла ошибка, и в finally тоже случилось исключение (например, при закрытии ресурса). Почему это плохо с точки зрения отладки?

AЭто плохо только из-за производительности, но на отладку и поиск первопричины это никак не влияет
BНичего страшного в этом нет: исключение из блока finally Python автоматически игнорирует и логирует
CИсключение из finally может «перекрыть» исходную ошибку и затруднить поиск первопричины по traceback
DЭто даже хорошо: вы увидите оба traceback одновременно и быстро поймёте, что именно упало в коде
Правильный ответ. Если finally падает, он может скрыть исходную причину падения и усложнить диагностику.

Разбор

finally нужен для безопасной уборки ресурсов. Если в нём есть код, который сам может упасть, появляется риск потерять фокус на исходном исключении из try. Python в этом случае поднимет именно ошибку из finally, а исходное исключение становится «причиной» (__context__) и легко теряется в логах. В результате вместо первопричины в трейсбеке доминирует поздняя ошибка, и исправление дольше и дороже.

Проверь себя · 1/3разбор после ответа
В обработчике данных используется конструкция try/except/finally. Внутри try произошла ошибка, она поймана в except. Что произойдёт с кодом в блоке finally?
Тренировать Python в Telegram

Ещё вопросы по теме «Исключения и отладка»