Основное использование оператора with
- это безопасная для исключения очистка объекта, используемого в операторе. with
обеспечивает закрытие файлов, снятие блокировок, восстановление контекстов и т. Д.
Есть ли у csv.reader какие-либо вещи для очистки в случае исключения?
Я бы пошел с:
with open("myfile.csv") as f:
for row in csv.reader(f):
# process row
Вам не нужно отправлять патч для совместного использования операторов csv.reader
и with
.
import contextlib
Справка по функции contextmanager в модуле contextlib :
contextmanager(func)
@contextmanager decorator.
Типичное использование:
@contextmanager
def some_generator(<arguments>):
<setup>
try:
yield <value>
finally:
<cleanup>
Это делает это:
with some_generator(<arguments>) as <variable>:
<body>
эквивалентно этому:
<setup>
try:
<variable> = <value>
<body>
finally:
<cleanup>
Вот конкретный пример того, как я его использовал: curses_screen .