◎知识点
with语句使用及异常处理
with语句执行流程
◎脚本练习
"""with语句""" """ 如果一个类对象实现了特殊方法__enter__()和__exit__(),那么就称这个类对象遵守了上下文管理协议, 同时,这个类对象的实例对象被称为上下文管理器。 with语句会让上下文管理器创建一个运行时上下文,当进入运行时上下文时自动调用特殊方法__enter__(), 当离开运行上下文时自动调用特殊方法__exit__()。 with语句的语法格式: with 上下文表达式 [as 变量]: with语句体 如果with语句体中产生了异常,那么sys.exc_info()的返回值中的三个元素会被自动传递给特殊方法 __exit__()的形参exc_type, exc_val, exc_tb, 这三个形参分别表示异常的类型、异常的错误信息和 异常调用堆栈的跟踪信息 与finally从句类似,特殊方法__exit__()总会被调用,通常在特殊方法__exit__()中释放资源, 例如:关闭文件、关闭网络连接等 """ class MyContextManager(object): def __enter__(self): print("特殊方法__enter__()被调用") return self def __exit__(self, exc_type, exc_val, exc_tb): print("特殊方法__exit__()被调用") print("异常的类型:%s" % exc_type) print("异常的错误信息:%s" % exc_val) print("异常调用堆栈的跟踪信息:%s" % exc_tb) # return True def do_sth(self): print("方法do_sth()被调用") print(1 / 0) """ with MyContextManager() as mcm: mcm.do_sth() """ """ 当with语句体中产生异常,并且特殊方法__exit__()没有返回True时,为了让程序能够继续执行, 可以使用try-except语句对抛出的异常实例对象进行捕获和处理。 """ try: with MyContextManager() as mcm: mcm.do_sth() except ZeroDivisionError as err: print(err)
◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/with.py