Марк Лутц, «Изучаем Python», глава 34:
«...после выхода из блока except эта переменная [X] удаляется. Так происходит оттого, что в противном случае она сохранила бы ссылку на стек вызовов времени выполнения, которая отложила бы сборку мусора, оставив выделенным избыточное пространство памяти. Однако удаление переменной происходит, даже если вы используете имя где-то в другом месте, и является более крайней политикой, чем применяемая для включений.»
«Вы обычно должны использовать в конструкциях except оператора try уникальные имена переменных, хотя они и локализуются внутри областей видимости. Если вам необходимо ссылаться на экземпляр исключения после оператора try, тогда просто присвойте его еще одному имени (saveit), которое не будет автоматически удаляться»:
try:
1/0
except Exception as X: # Python удаляет эту ссылку
saveit = X # Присвоить экземпляр исключения для его сохранения
print(saveit) # division by zero
Post #4219
869
- 👍 2
- ❤ 1
- 👎 1