博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python with语句
阅读量:5877 次
发布时间:2019-06-19

本文共 1325 字,大约阅读时间需要 4 分钟。

1.with语句使用场景

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

try:    file=open("fuwuqi.txt")    data=file.read()except:    passfinally:    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语句,无需捕获异常。

转载地址:http://iazix.baihongyu.com/

你可能感兴趣的文章
PHP常用扩展及服务记录
查看>>
VMware上安装linux
查看>>
spring-boot-devtools在Idea中热部署方法
查看>>
对服务器“防护过度”导致恢复服务过程中引发一系列问题
查看>>
常见字符串函数
查看>>
逻辑三层ORM通用类库 ThreeLayerLib.dll v1.0
查看>>
linux 处理文件名中带空格的方法
查看>>
51CTO稿酬标准2016版正式发布!
查看>>
数据库存储表情(设置utf8mb4编码)
查看>>
Java——容器(Auto-boxing/unboxing)
查看>>
反向输出链表
查看>>
poll---socket客户/服务器端编程
查看>>
调整数组中奇数偶数位置
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
Lua For Windows 环境配置及使sciTE支持中文
查看>>
找回密码测试注意
查看>>
步进器和分组按钮
查看>>
php 字符串转成二维数组
查看>>
Linux通配符和正则表达式的异同
查看>>
GCD 使用中需要注意的细节以及容易混淆的知识点
查看>>