Python with语句
Sep 14 2014参考
概念
上下文管理器:
实现了__enter__()
与__exit__()
方法的类实例,运行时,先运行__enter__()
方法,再运行目标函数,无论是否抛出错误,都运行__exit__()
方法。
with语句可以方便的取代try:/except:
语句达到在运行函数前先构建环境,退出函数清理环境的目的。
with open('filename') as somefile:
for line in somefile:
pass
打开文件把文件对象赋值给somefile,操作后自动关闭文件,无论操作是否抛错。
使用方法:
with context_expression [as target(s)]:
with body
target(s)
是上下文对象__enter__()
方法的返回值,多个返回值需要用tuple,返回值可在with body中操作。
自定义上下文管理器
class Context(object):
def __init__(self, ):
pass
def __enter__(self, ):
pass
def __exit__(self, ):
pass
这里要注意的是with Context()
使用的时候with后面是Context的实例。
使用装饰器操作上下文管理器
import functools
def with_context(func):
@functools.wraps(func)
def _wrapper(*args, **kw):
with Context():
return func(*args, **kw)
return _wrapper
补充: 关于异常捕获
# 抛出异常
raise errorTyepe, value, traceback # 异常类型,异常值,异常信息
# 捕获异常
try:
pass
except Error, e:
print e # 捕获到错误类型为Error的异常,e为错误的traceback
# with语句中的异常
__exit__(self, type, value, traceback):
# 捕获到with body中产生的错误,在退出时根据错误做处理