zoukankan      html  css  js  c++  java
  • 上下文管理

    1. try...except...finally
    import traceback
    def exe_try():
    try:
    print("code start")
    raise ImportError
    return 1

    except KeyError as e:
    print("keyerror")
    print(e)
    return 2
    except :
    print("error")
    print(traceback.format_exc())
    return 3
    finally:
    print("over")
    return 4

    print(exe_try())


    可以持续使用except 去捕获异常。finally:表示必须要去执行的地方,注意,当return放在try ... except。。。finally中的时候,程序肯定会取finally中的return的值,而且程序不管怎么样,都会去执行finally的程序。

    2. 上下文管理器---with

    __enter__ __exit__


    # 上下文管理器协议
    class Sample:
    def __enter__(self):
    print('enter')
    return self

    def __exit__(self, exc_type, exc_val, exc_tb):
    print('exit')

    def dosomething(self):
    print('do something')

    with Sample() as sample:
    print(sample)


    符合上下文管理协议,均可以使用with进行操作。
    处理流程:Sample()实例化的过程中,执行的是__enter__里面的语句,获取的值是__enter__的返回值,即可以理解为sample=self,在执行完with里面的语句的时候,执行的是__exit__里面的语句(不管里面是否有报错,都会去执行__exit__的语句),所以可以自我去实现很多上下文管理器,例如数据库的连接,django中事务的手动回滚等等一些需要关闭的操作


    3, contextlib简化上下文管理器---使用装饰器将生成器包装成上下文管理器


    import contextlib

    @contextlib.contextmanager# 使用装饰器将函数变成一个上下文管理器
    def file_open(file_name): #这个函数必须是一个生成器
    print('file open')# enter里面的逻辑
    yield {1:2}
    print('file end')#exit之后的逻辑

    with file_open('111.txt') as fh:
    print('file process')

  • 相关阅读:
    如何使用KVM 虚拟机安装RHEL7系统
    KVM虚拟机安装报错 KVM is not available
    Delphi读取不Word中不规则表格数据并转换成标准表格
    Delphi控制Excel输出上标示例
    动态设置和访问cxgrid列的Properties(转)
    PHP存储blob示例(转)
    visual studio code(vscode) 调试php(转)
    Node入门(转)
    ThinkPHP升级指导
    微信官方demo(php)
  • 原文地址:https://www.cnblogs.com/wenshu/p/12267098.html
Copyright © 2011-2022 走看看