一 with

python中的with的作用是自动释放对象,即使对象在使用的过程中有异常抛出。可以使用with的类型必须实现__enter__ __exit__。我的理解是=try...finally{},在finally中调用了释放函数。

[类似与CSharp中的using(){}关键字,用来自动确保调用对象的dispose()方法,即使对象有异常抛出。C#中可以使用using{}的对象必须已经实现了IDispose接口。]

def TestWith():
  with open("myfile.txt") as f:
     for line in f:
         print (line)
  f.readline() #f is already clean up here, here will meet ValueError exception
   
TestWith()

在with语句执行完以后,f对象马上就被释放了。所以下面在调用f.readline()会出错。

二 with + try...except

既能让对象自动释放,又包含了异常捕获的功能。

class controlled_execution(object):
    def __init__(self, filename):
        self.filename = filename
        self.f = None

def __enter__(self):
        try:
            f = open(self.filename, 'r')
            content = f.read()
            return content
        except IOError  as e:
            print (e)

def __exit__(self, type, value, traceback):
        if self.f:
            print ('type:%s, value:%s, traceback:%s' % (str(type), str(value), str(traceback)))
            self.f.close()

def TestWithAndException():
    with controlled_execution("myfile.txt") as thing:
        if thing:
            print(thing)

#TestWithAndException()

参考:

http://jianpx.javaeye.com/blog/505469

python语法31[with来自动释放对象]相关推荐

  1. Objective-C:ARC自动释放对象内存

    ARC是cocoa系统帮你完成对象内存释放的引用计数机制 .h文件 1 // Person.h 2 // 01-ARC 3 // 4 // Created by ma c on 15/8/13. 5 ...

  2. python语法31[变量的作用域+global]

    一  变量与作用域 变量的定义使用var=varvalue 1)如果函数中定义了同名的变量,则同名的全局变量被屏蔽,否则查找使用全局变量 def f1():     v1 = 'local'      ...

  3. python语法31[函数]

    一 简单函数和函数指针 def myadd(a,b):     return a + b; print(myadd(3,2)); f = myadd; print(f(20,30)); 二 函数的默认 ...

  4. 自动释放池autoreleasepool

    自动释放池是NSAutoreleasePool的实例,其中包含了收到autorelease消息的对象.当一个自动释放池自身被销毁(dealloc)时,它会给池中每一个对象发送一个release消息(如 ...

  5. 栈上对象的内存自动释放

    1.栈上对象的内存自动释放 当栈上的对象生命周期结束时,会自动的调用对象的析构函数,并释放内存. 如果内存中有成员对象,继续调用成员对象的析构函数. class CC { public:CC() {} ...

  6. Python自动化二--jmeter分布式测试,抓包,python语法基本介绍

    内容: 1.jmeter分布式测试 2.Jmeter在linux上运行 3.抓包 4.python 1.jmemter分布式测试-连接其它负载机 1)其它压力机上启动Jmeter.bat文件 2)在主 ...

  7. python语法详解大全_笔记:Python 语法要点汇总

    Python 是一门解释型语言,无需编译和链接 Python 解释器 交互模式 脚本模式 源码编码 默认情况下,Python 源文件是 UTF-8 编码 指定源文件的字符编码 # -*- coding ...

  8. while循环中指针会自动释放吗_C++】C++常见面试题汇总_持续更新中...

    1:指针(*).引用(&).解引用(*).取地址(&).的概念和区别 概念: 指针指向一块内存,指针保存的是内存的地址:引用是变量的别名,本质是引用该变量的地址. 解引用是取指针指向的 ...

  9. Python语法小白入门

    目录 1.print函数与转义字符 01. 输出函数print() 02.转义字符与原字符 2.变量与数据类型 01.二进制与字符编码 02.Python中的标识符和保留字 03.变量的定义和使用 0 ...

最新文章

  1. mysql 二进制日志变化_mysql-二进制日志
  2. word 通配符_word通配符技巧:HR高效办公技巧应用
  3. 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
  4. Extended Twin Composite Number
  5. 一步一步理解Paxos算法
  6. linux FTP 批量下载文件
  7. 60+PPT 下载丨Oracle Open World 2019
  8. android 获取wifi的ip地址吗,Android获取有线和无线(wifi)的IP地址
  9. 牛客OI周赛4-提高组 C 战争(war)
  10. 删除排序数组中的重复数字 II · Remove Duplicates from Sorted Array II
  11. python 分段拟合(curve fit)
  12. 国产CAD_手机也能看CAD图纸了?国产软件助力CAD告别电脑时代!
  13. R语言回归及混合效应模型及贝叶斯实现
  14. EA游戏Battlefield 2(战地风云2) 单机地图简介
  15. 2017互联网月饼哪家强?腾讯、阿里、百度、网易等21家中秋月饼盘点
  16. Process Hacker 简单介绍
  17. hive的一些常用命令
  18. excel函数应用:如何写出IF函数多级嵌套公式
  19. SPA(单页面web应用)和MPA(多页面web应用)的区别
  20. 电报与二极管三极管的出现

热门文章

  1. 一步步教你在Win2003下安装IIS组件
  2. iOS7应用开发3、Objective-C
  3. css多行多列的新闻模式
  4. Linux(debian7)操作基础(五)之per调用shell命令
  5. 数据清洗-拉格朗日插值
  6. 【ffmpeg】基本使用方法总结
  7. MXNet.gluon——图像I/O
  8. Kubernetes—配置管理ConfigMap(十三)
  9. 体检套餐管理系统 0421
  10. 枚举数据类型 c# 114866833