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语句,无需捕获异常。

  • 相关阅读:
    如何学习go源码
    最近打仁王2
    如何在时间复杂度为O(n)空间复杂度为O(1)的情况下完成链表的逆置
    漏洞复现-shellshock-bash破壳
    漏洞复现-aria2-任意文件写入
    漏洞复现-apereo-cas-4.1-rce
    漏洞复现-cgi-httpoxy
    漏洞复现-weblogic_weak_password-getshell
    sqlserver2008安装教程
    mysql内一些可以延时注入的查询语句
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7256276.html
Copyright © 2011-2022 走看看