python中with as 用法
来源:互联网 发布:java贵美商城 编辑:程序博客网 时间:2024/06/06 03:47
with as 呢,就是个python控制流语句,像 if ,while。
with as 语句的结构:
with expression [as variable]: with-block
with expresion as variable的执行过程是
- 首先执行_enter_函数,它的返回值会赋给as后面的variable,想让它返回什么就返回什么,只要你知道怎么处理就可以了,如果不写as variable,返回值会被忽略。
- 然后,开始执行with-block中的语句,不论成功失败(比如发生异常、错误,设置sys.exit()),在with-block执行完成后,会执行_exit_函数。
等价于:
try:
执行 _enter_的内容
执行 with_block.
finally:
执行 _exit_内容
附:try finally功能演示例子 (顺序执行try内语句,如果有错跳进except报错语句执行,随后直接进入finally。不管是否有错,都要执行finally)
try: a=1/2 print (a) b = 1 / 0 # an abnormal number/variable print (b) c = 2 / 1 # a normal number/variable print (c) except NameError: print("ops")except ZeroDivisionError: print("wrong math")except: print("error")#else:# print("no error")finally: print("end")
例子1(无报错):
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
执行步骤:
调用get_sample()函数,返回Sample()类;
执行Sample类中的enter()方法,打印”In__enter_()”字符串,并将字符串“Foo”赋值给as后面的sample变量;
- 执行with-block码块,即打印”sample: %s”字符串,结果为”sample: Foo”
- 执行with-block码块结束,返回Sample()类,执行类方法exit()。因为在执行with-block码块时并没有错误返回,所以type,value,trace这三个arguments都没有值。直接打印 print “In__exit__()”
结果:
In __enter__()sample: FooIn __exit__()
例子2(有报错):
class Sample: def __enter__(self): return self def __exit__(self, type, value, trace): print "type:", type print "value:", value print "trace:", trace def do_something(self): bar = 1/0 return bar + 10 with Sample() as sample: sample.do_something()
结果:
type: <class 'ZeroDivisionError'>value: division by zerotrace: <traceback object at 0x000000000EC6F7C8>Traceback (most recent call last): File "<ipython-input-16-1f63b4f99f4d>", line 13, in <module> sample.do_something() File "<ipython-input-16-1f63b4f99f4d>", line 9, in do_something bar = 1/0ZeroDivisionError: division by zero
阅读全文
0 0
- python中with as 用法
- python中 with as 用法
- python中with as 用法
- python 中 with as的用法
- python 中关于with...as的用法
- Python中with...as的用法
- python中 with...as的用法
- python with...as...用法
- python with...as用法
- python with...as...用法
- python with...as...用法
- python with as 用法
- python with as用法
- python with as 用法
- python的with...as...用法
- python with as的用法
- python with as的用法
- Python中关于with open file as 的用法
- 图的深度优先搜索
- docker之常用命令整理
- VMware虚拟机增加磁盘空间的扩容操作
- Spark:Java实现Top N
- RxJava源码分析(一)
- python中with as 用法
- 带你逐步深入了解SSH框架——struts2拦截器
- java 构造方法,static关键字,main方法修饰解释
- Java并发学习(十七)-并发工具CountDownLatch
- java构造方法练习
- bluemail-iOS使用SMTP发送邮件 send mail via SMTP at iOS
- typedef的用法
- Spark:Scala实现Top N
- 互联网大会上的网约车的未来