Discuss / Python / 把楼上老铁推荐的文章提取了一段能帮助理解的。

把楼上老铁推荐的文章提取了一段能帮助理解的。

Topic source

YY饺子

#1 Created at ... [Delete] [Delete and Lock User]

例如with context_expression [as target(s)]: with-body,

它的执行顺序是这样的

1.执行 context_expression,生成上下文管理器 context_manager

2.调用上下文管理器的 enter() 方法;如果使用了 as 子句,则将 enter() 方法的返回值赋值给 as 子句中的 target(s)

3.执行语句体 with-body

4.不管是否执行过程中是否发生了异常,执行上下文管理器的 exit() 方法,exit() 方法负责执行“清理”工作,如释放资源等。如果执行过程中没有出现异常,或者语句体中执行了语句 break/continue/return,则以 None 作为参数调用 exit(None, None, None) ;如果执行过程中出现异常,则使用 sys.exc_info 得到的异常信息为参数调用 exit(exc_type, exc_value, exc_traceback)

5.出现异常时,如果 exit(type, value, traceback) 返回 False,则会重新抛出异常,让with 之外的语句逻辑来处理异常,这也是通用做法;如果返回 True,则忽略异常,不再对异常进行处理

子鱼若鱼

#2 Created at ... [Delete] [Delete and Lock User]

谢谢


  • 1

Reply