第一次遇到with是在文件那一章,with的作用是就是会自动关掉文件管道。

with open('path','读写模式‘) as f:

do something

这一部分就等价于

f = open('path','读写模式')

do something

f.close()

第二次是在数据库连接,连接池那里。使用的基本思想大致是with所求值的对象必须有一个enter()方法和一个exit()方法。下面给一个简单的例子去说明使用with的时候做了哪些操作

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)

with开始,enter()方法被执行

enter()方法返回的值 - 这个例子中是Foo,赋值给变量sample

执行代码块,打印变量sample的值为 Foo

exit()方法被调用 with真正强大之处是它可以处理异常。注意到Sample类的exit方法有三个参数- val, type 和 trace。 这些参数在异常处理中相当有用。

class Sample:

def __enter__(self):

return self

def __exit__(self, exc_type, exc_val, exc_tb):

print(exc_type)

print(exc_val)

print(exc_tb)

def doSomething(self):

a = 1/0

return a

def getSample():

return Sample()

if __name__ == '__main__':

with getSample() as sample:

sample.doSomething()

这段代码的执行结果是

/usr/bin/python3.5 /home/zionhuang/data/awesome-python3-webapp/test/test8.py

division by zero

Traceback (most recent call last):

File "/home/zionhuang/data/awesome-python3-webapp/test/test8.py", line 23, in

sample.doSomething()

File "/home/zionhuang/data/awesome-python3-webapp/test/test8.py", line 14, in doSomething

a = 1/0

ZeroDivisionError: division by zero

Process finished with exit code 1

结果头三句加黑的分别是val, type 和 trace这三个参数在出现异常时的值

常抛出时,与之关联的type,value和stack trace传给exit()方法,因此抛出的ZeroDivisionError异常被打印出来了。开发库时,清理资源,关闭文件等等操作,都可以放在exit方法当中。

因此,Python的with语句是提供一个有效的机制,让代码更简练,同时在异常产生时,清理工作更简单。

python中with的用法简单来说_Python中with的用法相关推荐

  1. python中的pd是什么意思_python中pd的用法 python中列表的用法

    python标准库中常用的网络相关模块有哪些? 1.asynchat.asyncoreasynchat是asyncore的增强版.asyncore则是异步套接字处理程序. 2.Cookie.cooki ...

  2. python里删除range里的数字_python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  3. python什么是堆什么是栈_python中堆和栈_Python小知识00002

    原博文 2019-05-15 09:48 − 变量位于栈 对象位于堆 ... 0 739 相关推荐 2019-12-03 17:11 − 目录 Python 全栈之路 一. Python 1. Pyt ...

  4. python中def _init_是什么意思_python中的__init__(self)是什么意思呢

    __init__(self)这个时类的初始化函数 classObj:def __init__(self):print 1obj= Obj() #这时候__init__这个函数会被调用,self指obj ...

  5. python协程怎么做数据同步_Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

  6. python代码什么时候用单引号_Python 中的单引号和双引号有什么区别?

    在Python当中可以使用单引号,也可以使用双引号,那两者有什么区别吗? 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了可以简化程序 ...

  7. python中的pass是什么意思_Python中pass的作用与使用教程

    Python中pass的作用与使用教程 Python中pass的作用 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++/java中: if(true) ; //d ...

  8. python之33个关键字详解_Python 中的关键字 with 详解

    在 Python 2.5 中,with关键字被加入.它将常用的 try ... except ... finally ...模式很方便的被复用.看一个最经典的例子: with open('file.t ...

  9. python 3.7.3 运算7错误_Python中通常不应该犯的7个错误

    介绍 Python是一门相对容易掌握的语言,但是由于假设了很多事情,因此犯错误非常容易. 此外,这些错误可能会在很长一段时间内被忽略. 在我其他前四个菜鸟Python错误之前. 避免这些新手Pytho ...

最新文章

  1. mysql dump 到的文件_mysql查询结果导出到文件
  2. 你可以把编程当做一项托付终身的职业
  3. java jetty eclipse_用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)
  4. java配置常量_Java构建时间常量配置
  5. 使用pdb调试python
  6. 拿了 30K 的 offer!
  7. 奥迪推出大型自动驾驶数据集A2D2
  8. Error:Trailing spaces not allowed no-trailing-spaces
  9. 一段可以无限follow他人的代码
  10. 带宽对于并发连接的一些总结
  11. 运维人必知必会的Zabbix核心命令
  12. 主干网络系列(2) -ResNet V2:深度残差网络中的恒等映射
  13. matlab nist接口文件,Matlab调用refprop教程说明
  14. RHCSA红帽认证考点2022(红帽认证系统管理员)
  15. C#窗体标准计算器(下) 初级新手请多担待。
  16. 用QT实现一个简单的桌面宠物
  17. lc用U盘更新固件_索尼X9000H/X9100H系列机型更新HDMI2.1固件
  18. 怎么白嫖一部好手机?我来告诉你
  19. 大学三年来的心路历程分享
  20. 小马激活报错:已停止工作

热门文章

  1. GPT语言模型:通过生成式预训练改善语言理解 OpenAI 2018
  2. 高并发锁Lock的详细使用
  3. 如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
  4. 深度学习之卷积神经网络CNN
  5. Android进程间通信之socket通信
  6. Quartz调用大全
  7. C# 操作符重载 模拟String
  8. EMA算法的C#实现
  9. 分布式SESSION一致性
  10. mysql 中文的数据类型_MySQL 数据类型