with语句
在使用try-except-finally捕获异常时,finally子句中的代码必定会执行,但这种方式过于繁琐,在某些情况下还可以使用with语句替代try-except-finally语句。with语句支持创建资源、抛出异常、释放资源等操作,并且可以简化代码。
with语句适用于对资源进行访问的场合,无论资源在使用过程中是否发生异常,都可以使用with语句保证执行释放资源操作。
with语句的语法格式如下:
with 上下文表达式 [as 资源对象]:
语句体
以上语法中的上下文表达式返回一个上下文管理器对象,如果指定了as子句,将上下文管理器对象的enter()方法的返回值赋值给资源对象。资源对象可以是单个变量,也可以是元组。
使用with语句操作文件对象的示例如下:
with open('with_sence.txt') as file:
for aline in file:
print(aline)
上述代码使用with语句打开文件with_sence.txt,如果文件能够顺利打开则会将文件对象赋值给file对象,然后通过for循环对file进行遍历输出,当对文件遍历之后,with语句会关闭文件;如果文件不能顺利打开,with语句也会将文件with_sence.txt关闭。
注意:
不是所有对象都可以使用with语句,只有支持上下文管理协议的对象才可以使用,目前支持该协议的对象如下:
file
decimal.Context
thread.LockType
threading.BoundedSemaphore
threading.Condition
threading.Lock
threading.RLock
threading.Semaphore