Python中的with...as用法介绍


Posted in Python onMay 28, 2015

这个语法是用来代替传统的try...finally语法的。

with EXPRESSION [ as VARIABLE] WITH-BLOCK

基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。

紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

file = open("/tmp/foo.txt")

try:

    data = file.read()

finally:

    file.close()

使用with...as...的方式替换,修改后的代码是:
with open("/tmp/foo.txt") as file:

    data = file.read()

#!/usr/bin/env python

# with_example01.py

 

 

class Sample:

    def __enter__(self):

        print "In __enter__()"

        return "Foo"

 

    def __exit__(self, type, value, trace):

        print "In __exit__()"

 

 

def get_sample():

    return Sample()

 

 

with get_sample() as sample:

    print "sample:", sample

执行结果为
In __enter__()

sample: Foo

In __exit__()

1. __enter__()方法被执行
2. __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample'
3. 执行代码块,打印变量"sample"的值为 "Foo"
4. __exit__()方法被调用with真正强大之处是它可以处理异常。可能你已经注意到Sample类的__exit__方法有三个参数- val, type 和 trace。这些参数在异常处理中相当有用。我们来改一下代码,看看具体如何工作的。

Python 相关文章推荐
python备份文件的脚本
Aug 11 Python
基于Python实现的扫雷游戏实例代码
Aug 01 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
python机器人行走步数问题的解决
Jan 29 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
详解Python 解压缩文件
Apr 09 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
Python识别验证码的实现示例
Sep 30 Python
python 爬虫如何实现百度翻译
Nov 16 Python
django上传文件的三种方式
Apr 29 Python
python关键字and和or用法实例
May 28 #Python
Python yield 使用浅析
May 28 #Python
Python中super的用法实例
May 28 #Python
Python中的super用法详解
May 28 #Python
Python读写ini文件的方法
May 28 #Python
Python实现给文件添加内容及得到文件信息的方法
May 28 #Python
Python功能键的读取方法
May 28 #Python
You might like
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python实现线程状态监测简单示例
2018/03/28 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
python实现桌面托盘气泡提示
2019/07/29 Python
解决Python二维数组赋值问题
2019/11/28 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python 实现汉诺塔游戏
2020/11/28 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
结婚典礼证婚词
2014/01/11 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
新闻稿格式范文
2015/07/18 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL