|
|
|
|
移动端

3.4.1 上下文管理器的原理(2)

《自学Python:编程基础、科学计算及数据分析》第3章Python 进阶,在本章中,我们将学习 Python的一些进阶用法,包括函数的进阶,迭代器、生成器、装饰器、上下文管理器的使用,以及 Python中的变量作用域。本节为大家介绍上下文管理器的原理。

作者:李金来源:机械工业出版社|2018-05-04 13:49

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

3.4.1 上下文管理器的原理(2)

当运行过程中抛出异常时:

  1. In [16]: with TestManager():  
  2. ...: a = 1 / 0  
  3. ...:  
  4. Entering  
  5. Exiting  
  6. Arg: <type 'exceptions.ZeroDivisionError'> 
  7. Arg: integer division or modulo by zero  
  8. Arg: <traceback object at 0x0000000004656988> 
  9. -----------------------------------------------------------------------  
  10. ZeroDivisionError Traceback (most recent call last)  
  11. <ipython-input-16-829e36dde2da> in <module>()  
  12. 1 with TestManager():  
  13. ----> 2 a = 1 / 0  
  14. ZeroDivisionError: integer division or modulo by zero 

当运行出现异常时,这三个参数包含的是异常的具体信息。

在上面的例子中,我们只是简单的显示了异常的值,并没有像 try-except块中的except块部分一样对异常进行处理,所以异常在执行完.__exit__()方法后被继续抛出了。

如果不想让异常继续抛出,我们只需要将.__exit__()方法的返回值设为True: In [17]: class TestManager(object):

  1. In [17]: class TestManager(object):  
  2. ...: def __enter__(self):  
  3. ...: print "Entering"  
  4. ...:  
  5. ...: def __exit__(self, exc_type, exc_value, traceback):  
  6. ...: print "Exiting"  
  7. ...: print "Arg:", exc_type  
  8. ...: print "Arg:", exc_value  
  9. ...: print "Arg:", traceback  
  10. ...: return True  
  11. ...:  
  12. In [21]: with TestManager():  
  13. ...: a = 1 / 0  
  14. ...:  
  15. Entering  
  16. Exiting  
  17. Arg: <type 'exceptions.ZeroDivisionError'> 
  18. Arg: integer division or modulo by zero  
  19. Arg: <traceback object at 0x0000000004655508> 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

非常网管——网络工程案例

本书面向企业网络应用需求,详细介绍了Windows网络互联解决方案、中小企业共享上网解决方案、基于ISA Server 2006的代理服务器与防火墙解决...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊