发布于2020-03-17 10:54 阅读(1674) 评论(0) 点赞(8) 收藏(2)
- # try_except_finally
- try:
- f_read = open("Tom.txt")
- print("code started")
- raise KeyError
- f_read.close()
- #raise IndexError # 此时就没有捕获到异常,代码出错
- f_read.close() # 打开正常时,才会执行该语句,如果有抛出异常,则不会执行该语句,
- # 此时应该在每次抛出error时,都执行f_read.close(),这样才可以释放该文件
-
- except KeyError as e:
- print("key error")
- f_read.close()
- else:
- print("other error") # 在没有抛异常时,捕捉其它异常。
- finally: # 无论前面的代码是否允许,都会执行finally后面的语句
- print("finally")
- f_read.close() # finally语句一般用于资源释放
- # try_except_finally
- def exe_try():
- try:
- print("code started")
- raise KeyError
- return 1 # 前一句,raise了一个KeyError,导致该语句没被执行
-
- except KeyError as e:
- print("key error")
- return 2 # 此时return 2,为什么执行结果会return 4?
- # 如果finally里面有return语句,就会return finally里面的return语句
- # 如果finally里面没有return语句,就会return调用之时的return语句 return 2
- # return 2时,将2压入堆栈里面,继续执行finally,在finally里面如果发现return语句,
- # 则将4压入栈顶。如果finally里面return语句,则返回之前压入的2
- else:
- print("other error") # 在没有抛异常时,捕捉其它异常。
- return 3
-
- finally: # 无论前面的代码是否允许,都会执行finally后面的语句
- print("finally")
- #return 4
-
- if __name__ == "__main__":
- result = exe_try()
- print(result)
- # 上下文管理器 with语句
- class Sample():
- def __enter__(self): # with 语句,默认会首先调用__enter__
- print("enter")
- # 获取资源
- return self
- def __exit__(selfs,exc_type,exc_val,exc_tb): # with 语句,来开时,会默认调用__exit__方法
- # 释放资源
- print("exit")
- def do_something(self):
- print("doing something")
-
- with Sample() as sample: # with语句可以实例化一个对象/类;嵌入with语句后,就会自动调用__exit__
- sample.do_something() # 我们并没有调用__enter__/__exit__这个魔法函数,但是系统还是自动的调用到__enter__/__exit__
- # 我们在定义类时,只需要在__enter__语句获取资源,__exit__语句释放资源,
- # 使用with语句,python解释器就可以对它们进行默认使用,此即上下文管理器协议
- C:\Users\Amber\PycharmProjects\test0\venv\Scripts\python.exe C:/Users/Amber/PycharmProjects/test0/Chapter03/with_test.py
- enter
- doing something
- exit
__enter__ + __exit__ 就构成了python上下文管理器协议,后续中应该常用这种架构
原文链接:https://blog.csdn.net/f2157120/article/details/104886358
作者:一切都会好起来over
链接:https://www.pythonheidong.com/blog/article/262597/e2e1180e32ec04cbed7a/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!