#python
#python
Вопрос:
Я новичок в Python и не понимаю, когда мне следует вызывать close.
Например, рассмотрим этот пример из документации csv.
import csv
with open('some.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row
В конце этой задачи нет reader.close() .
Q> Как мне узнать, должен ли за вызовом функции следовать вызов закрытия?
Ответ №1:
Функции, возвращающие ресурсы, которые необходимо очистить, будут иметь документацию, объясняющую это. csv.reader
не открывает файл или иным образом не создает закрываемый ресурс. open
Вызов выполняется, но with
оператор заботится о его закрытии для вас.
Ответ №2:
Единственный раз, когда вам нужно вызвать close, — это когда вы должны освободить системные ресурсы. По большому счету это верно только для дескрипторов файлов. Общие объекты, такие как средство чтения csv, не обязательно закрывать.
Ответ №3:
Приведенный вами пример не требует закрытия, потому что открытый файл был обработан with
(аналогично using
C #).
Теперь, если бы ваш пример был таким, было бы close()
:
import csv
f = open('some.csv', 'rb')
reader = csv.reader(f)
for row in reader:
print row
f.close()
По сути, это одно и то же, но with
он устраняет сбои во время выполнения, чтобы убедиться, что дескриптор файла ( f
) закрыт. Если бы между open
и здесь была проблема close
, у вас все равно был бы открытый файловый ресурс.
РЕДАКТИРОВАТЬ: with
это то же самое, что и это:
import csv
f = open('some.csv', 'rb')
try:
reader = csv.reader(f)
for row in reader:
print row
finally:
f.close()