前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3:Python 异常处理以

python3:Python 异常处理以

作者头像
py3study
发布2020-01-13 11:18:53
5320
发布2020-01-13 11:18:53
举报
文章被收录于专栏:python3python3

try …except…else 语句

是处理异常公式, try 是有可能抛异常的代码块, except 抓取异常的类型, else 是指当没有抓到抛错,就运行这块代码。请看下下边的例子:

从结果来看 走的路线是: try(按照raise 的error 找except)>找到except并执行except代码块>执行finally语句块 如果没有抛错走的路线是: try 没有error>走else 语句>finally 看来不管有没有错误, finally 语句一定会执行到。 在用到finally 要注意他会覆盖 except or else 的返回值。

从打印的结果 ,他覆盖了 return 3。 如果走else路线同样return 的4 也会被覆盖, 自己试试下。 那小伙伴有疑问 什么情况下使用 finally 呢 答案: 是在释放资源的时候 看下边的例子。

大家看了 吗, 只要有流程的分支的地方一定要加上这个 fp.close(), 如果再加分支,还需要再加这个close 函数。 有没有更好的解决方法吗? 答案就是 用finally。请看下边的代码:

大家看看是不是很神奇, 资源的释放不光是文件的关闭,还有socket 连接,数据库的连接

上边的内容只是复习下异常处理的内容, 下边才是重头戏 with上下文管理器

with上下文管理器

with上下文管理器协议包括两个魔法函数 1.__enter__2.exit 用实例来解释下这两个魔法函数

打印结果是: enter Traceback (most recent call last): exit File “C:/Users/tengfei/PycharmProjects/test1/alert.py”, line 12, in P.said() AttributeError: ‘NoneType’ object has no attribute ‘said’

根据提示我们就知道了, 我们实例化是“NoneType” 类型,意思就是空的对象。

原因是 因为我们在获取资源(enter)没有返回值,所以默认返回的是空。 我们加上 返回值 就可以运行成功了如下:

打印结果: enter #并没有调用,也会运行这个函数 said exit #并没有调用,也会运行这个函数

总结: 上下文管理器协议 是用with 进行调用,默认调用了 enter 和 exit 两个魔法函数。 with是对try…expect…finally语法的一种简化,并且提供了对于异常非常好的处理方式。 根据实际需要应用在不同的场景。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • try …except…else 语句
  • with上下文管理器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档