Как портативно узнать min (INT_MAX, abs (INT_MIN))?

В общем, чтобы убедиться, что что-то происходит независимо от того, что вы используете

from exceptions import NameError

try:
    f = open(x)
except ErrorType as e:
    pass # handle the error
finally:
    try:
        f.close()
    except NameError: pass

finally, будут выполняться независимо от того, есть ли ошибка в блоке try и есть ли или нет ошибки в обработке ошибок, которая имеет место в блоках except. Если вы не обрабатываете возбужденное исключение, оно все равно будет поднято после того, как будет отменен блок finally.

Общий способ убедиться, что файл закрыт, - это использовать «менеджер контекста» ".

http://docs.python.org/reference/datamodel.html#context-managers

with open(x) as f:
    # do stuff

Это автоматически закроет f.

Для вашего вопроса №2, bar немедленно закрывается, когда счетчик ссылок достигает нуля, поэтому del foo, если других ссылок нет.

Объекты НЕ созданы __init__, они созданы __new__.

http://docs.python.org/reference/datamodel.html#object.new

Когда вы делаете foo = Foo(), на самом деле происходит две вещи: сначала создается новый объект __new__, затем он инициализируется __init__. Таким образом, вы не можете называть del foo до того, как эти шаги будут выполнены. Однако, если в __init__ есть ошибка, __del__ все равно будет вызываться, потому что объект фактически был создан в __new__.

Редактировать: Исправлено, когда удаление происходит, если счетчик ссылок уменьшается до равен нулю.

30
задан Nathaniel Ford 9 May 2015 в 21:13
поделиться