学科分类
目录
基础

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

点击此处
隐藏目录