这是一个新的语法。这是一个上下文管理协议。目的是消除所有的尝试,除了最后关键字和资源分配和释放相关代码流程图,简化试.... ....除外finlally处理流程。__enter__与初始化的方法,然后在__exit__后和异常处理。因此,必须有两种方法处理的对象,__enter__()和__exit__ ()。__enter__()方法运行之前声明的身体(与语句的代码块包装),执行和__exit__()方法运行后执行语句的身体并退出。与声明适用于访问资源,以确保执行必要的\u201C清理\u201D操作时无论在使用过程中出现异常,和资源被释放,如使用后自动关闭文件,自动获取和释放锁的线程,等等的基本语法格式声明:表达式(作为目标):with_body参数描述:表达式:是一个表达式,它需要执行;
例如:\u2026\u2026print ()\u2026\u2026我不能告诉真相,我不能告诉真相,我不能告诉真相。的工作原理与声明:声明后,将被评估,__enter__()方法返回的对象。这个方法的返回值将分配给后面的变量作为关键字。当所有与执行后面的代码块,该__exit__()方法返回的对象将被调用。声明中最重要的一部分是评估的对象必须有两个方法,__enter__()和__exit__ ()。然后我们可以自己实现这两个方法来定制语句来处理异常。示例代码:#编码= utf-8class打开(对象):def __init__(自我,文件名):(文件名)打印\u201C资源:% s % filenamedef __enter__(自我):打印\u201D[输入% s]:分配资源。
\u201C如果exc_trackback没有:打印\u201D[退出% s]:退出没有例外。\u201D()其他:打印\u201D[退出% s]:退出例外。\u201D返回False #可以省略,默认也被认为是假的,没有一个打开(r ' d: \\ \\ ')是《外交政策》:在():行打印线结果:__enter__()返回一个引用打开本身,可以分配给fp变量的条款;返回值的类型可以根据实际需要,将不同类型不一定上下文管理器对象本身。exc_trackback __exit__()方法检测变量。如果不是没有,这意味着一个例外发生。返回False意味着异常需要由外部代码逻辑;如果没有异常出现,默认的返回值是没有,在布尔环境中产也被认为是假的,但因为没有异常出现,__exit__的三个参数()都没有,和上下文管理代码可以检测到这种情况,做正常处理。