是否可以with
直接在CSV文件中使用该语句?能够做这样的事情似乎很自然:
import csv with csv.reader(open("myfile.csv")) as reader: # do things with reader
但是csv.reader没有提供__enter__
和__exit__
方法,所以这不起作用.但是,我可以分两步完成:
import csv with open("myfile.csv") as f: reader = csv.reader(f) # do things with reader
第二种方式是理想的做法吗?为什么不让csv.reader直接与with语句兼容?
with
statement 的主要用途是对语句中使用的对象进行异常安全的清理.with
确保关闭文件,释放锁定,恢复上下文等.
如果出现异常,csv.reader是否有清理的东西?
我会去:
with open("myfile.csv") as f: for row in csv.reader(f): # process row
您无需一起提交要使用csv.reader
和with
声明的补丁.
import contextlib
有关模块contextlib中的函数contextmanager的帮助:
contextmanager(func) @contextmanager decorator.
典型用法:
@contextmanager def some_generator(): try: yield finally:
这使得:
with some_generator() as :
相当于:
try: = finally:
这是我如何使用它的具体示例:curses_screen.