zoukankan      html  css  js  c++  java
  • python with语句

    1.with语句使用场景
    当异常发生时,往往需要做一些额外操作,如关闭数据库连接,关闭文件句柄等。
    一般使用try/catch/finally来完成这些操作,如:
    读文件时,可能出现两种异常,打开文件异常,读文件内容异常:

    try:
        file=open("fuwuqi.txt")
        data=file.read()
    except:
        pass
    finally:
        file.close()

    with语句写法如下,它可以自动处理上下文环境产生的异常:

    with open("fuwuqi.txt") as file:
        data=file.read()

    2.with语句工作原理
    with后面紧跟的对象obj,必须要有__enter__,__exit__两个方法
    with语句会首先调用obj对象的__enter__方法,并将返回值,传给as后面的变量
    with里面代码块执行完毕后,将调用obj对象的__exit__方法。
    使用示例:

    class Sample():
        def __enter__(self):
            return "foo"
        def __exit(self,type,value,trace):
            print "exit"
    with Sample() as enter_result:
        print "enter_result:",enter_result

    运行结果:

    3.with语句处理异常
    需要在对象obj中的__exit__方法定义处理异常

    class Sample():
        def __enter__(self):
            return self
        def __exit__(self,type,value,trace):
            print "exit"
            print 'type',type
            print 'value',value
            print 'trace',trace
        def div(self,a,b):
            return a/b        
    with Sample() as obj:
        obj.div(1,0)

    运行结果:

    class Sample():
        def __enter__(self):
            return self
        def __exit__(self,type,value,trace):
            print "exit"
            print 'type',type
            print 'value',value
            print 'trace',trace
        def div(self,a,b):
            return a/b        
    with Sample() as obj:
        obj.div(1,2)

    4.with语句的作用
    代码更简洁,异常处理工作可以由对象obj的__exit__方法来完成,
    如File对象的__exit__方法,已支持关闭文件句柄,使用with语句,无需捕获异常。

  • 相关阅读:
    C# 字符串相似度算法
    在C# 中枚举COM对象的方法和属性名称
    question:读取以TAB为分隔符CSV文件时遇到的问题
    WCF文件传输
    C#读写XML的演示程序(1)
    C#解析HTML 的两种方法
    在C#中使用MSHTML的高级支持接口
    XML读写演示程序(2)
    聊天程序WMChat开发文档
    数据表之间的链接
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7256276.html
Copyright © 2011-2022 走看看