简介

在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作;当语句块执行完成后,需要继续执行一些收尾动作。例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资源的加锁和解锁等情况。

对于这种情况python提供了上下文管理器(Context Manager)的概念,可以通过上下文管理器来定义/控制代码块执行前的准备动作,以及执行后的收尾动作。

一、为何使用上下文管理器

  1. 上下文管理器提供了 __enter__()方法和__exit__()方法,在with语句中,如果用as指定了一个目标,会将__enter__()方法的返回值赋予这个目标。
  2. 运行中如果发生了异常,那么将会把异常的类型,值和追踪传递给__exit__()方法。如果__exit__()方法返回值为true,那么这个异常将会被抑制,否则这个异常将会被重新抛出。
  3. 如果没有发生异常,也会调用__exit__()方法,但是传入的参数为None, None, None。通常也是在这里放入代码进行如文件流/会话的关闭等操作。

1、不使用上下文管理器的情况
通过try...finally语句执行异常处理和关闭句柄的动作。

 1 #coding:utf8
 2 
 3 logger = open("log.txt", "a+")
 4 try:
 5     logger.write("hello world!\n")
 6     
 7 finally:
 8     logger.close()
 9     f = open("log.txt","a+")
10     for i in f.readlines():
11         print i
12     f.close()
13 
14 print logger.closed
View Code

相关文章:

  • 2021-11-29
  • 2021-07-15
  • 2022-01-23
  • 2021-05-23
  • 2021-09-11
  • 2021-06-29
  • 2021-12-24
猜你喜欢
  • 2022-01-16
  • 2021-07-27
  • 2021-06-03
  • 2021-10-26
  • 2022-12-23
相关资源
相似解决方案