深入理解python try异常处理机制


Posted in Python onJune 01, 2016

深入理解python try异常处理机制

#python的try语句有两种风格
#一:种是处理异常(try/except/else)
#二:种是无论是否发生异常都将执行最后的代码(try/finally)

try/except/else风格
try:
  <语句> #运行别的代码
except <名字>: 
  <语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
  <语句> #如果引发了'name'异常,获得附加的数据
else:
  <语句> #如果没有异常发生
#try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
#1、如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
#2、如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
#3、如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。


try/finally风格
try:
  <语句>
finally:
  <语句> #退出try时总会执行

python总会执行finally子句,无论try子句执行时是否发一异常。
1、如果没有发生异常,python运行try子句,然后是finally子句,然后继续。
2、如果在try子句发生了异常,python就会回来执行finally子句,然后把异常递交给上层try,控制流不会通过整个try语句。
当你想无论是否发生异常都确保执行某些代码时,try/finally是有用的。

#这个在打开文件的时候有用 finally总是在最后close()文件

try 语句子句形式表
except: 捕获所有异常
except name: 只捕获特定的异常
except name,value: 捕获异常和它的附加数据(将异常的信息保存到value,)
except (name1,name2): 捕获任何列出的异常
else: 如果没有异常
finally: 总是执行

>>> try:
  f = open('file.txt')
except IOError, e:
  print e
else:
    print 'wrong'

    
[Errno 2] No such file or directory: 'file.txt'

最新的python版本 支持try/except/finally

try: 1:如果x没有异常,执行z,i
  x 2:如果x有异常, 一:如果except捕捉到异常则执行y,i
except(name): 二:没捕捉到,执行i,然后返回内置异常处理 
  y
else:
  z
finally:
  i

以上这篇深入理解python try异常处理机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Django实现学员管理系统
Feb 26 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
Python异常类型以及处理方法汇总
Jun 05 Python
python学习 流程控制语句详解
Jun 01 #Python
python+Django+apache的配置方法详解
Jun 01 #Python
python中函数默认值使用注意点详解
Jun 01 #Python
Python中基础的socket编程实战攻略
Jun 01 #Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 #Python
Python中Collections模块的Counter容器类使用教程
May 31 #Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 #Python
You might like
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
寄语是什么意思
2014/04/10 职场文书
关爱留守儿童标语
2014/06/18 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
校运会新闻稿
2015/07/17 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android