浅谈Python的异常处理


Posted in Python onJune 19, 2016

 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

注意:虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等。

一.与python异常相关的关键字

raise:手动抛出/引发异常:raise [exception[,data]
try/except:捕获异常并处理
pass:忽略异常
as:定义异常实例(except IOError as e)
finally:无论是否出现异常,都执行的代码]
else:如果try中的语句没有引发异常,则执行else中的语句
except Exception as error:

二.python中的异常类型

1.StandardError类:如果程序上出现逻辑错误, 将引发该异常。StandardError类是所有内敛异常的基类,放置在默认的命名空间中,因此使用IOEroor, EOFError, ImportError等类,不需要导入exception模块。

StopIteration类:判断循环是否执行到尾部,如果循环到尾部,则抛出该异常。
GeneratorExit类:是由Generator函数引发的异常,当调用close()时引发该异常。
Warning类:表示程序中的代码引起的警告。

三.基本方式:

1.try:

        语句1

  except  [exception1(,exception2...),[data…]]:

       语句2

  else:

       语句3

该种异常处理语法的规则是:

·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

·   如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

·   如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

·   如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

·   如果没有发生异常,则执行else块代码。

import traceback
try:
  1/0
except Exception as err:
  print(err)
try:
  f = open("file.txt","r")
except IOError as e:
  print(e)
try:
  f = open("file.txt","r")
except Exception as e:
  print(e)

 最后两个的输出是一模一样的---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.try:

      语句1

  finally:

      语句2

该语句的执行规则是:

·   执行try下的代码。

·   如果发生异常,在该异常传递到下一级try时,执行finally中的代码。

·   如果没有发生异常,则执行finally中的代码。

第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如我们在python中打开一个文件进行读写操作,我在操作过程中不管是否出现异常,最终都是要把该文件关闭的。这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异

所以,一般情况下,finally里面执行的都是一些清理工作,比如:关闭文件描述符,释放锁等

注意,finally中,如果出现异常,外部如果没有相应的捕获机制,该异常会层层抛出,直到最顶端,然后解释器停止。一般在外层再加一次try except异常捕获

三.手动使用raise引发异常

1.raise [exception[,data]]

2.在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。

3.实例:

try:
  print("开始测试")
  raise IOError
except IOError:
  print("定义好的错误")
except:
  print("别的错误")
Python 相关文章推荐
Python修改Excel数据的实例代码
Nov 01 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
python 类之间的参数传递方式
Dec 20 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
浅析Python requests 模块
Oct 09 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
浅谈Python 中的复数问题
May 19 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
qpython3 读取安卓lastpass Cookies
Jun 19 #Python
python3实现读取chrome浏览器cookie
Jun 19 #Python
python3 实现的人人影视网站自动签到
Jun 19 #Python
python3实现暴力穷举博客园密码
Jun 19 #Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 #Python
Python中使用装饰器来优化尾递归的示例
Jun 18 #Python
举例讲解Python面向对象编程中类的继承
Jun 17 #Python
You might like
php 无限级 SelectTree 类
2009/05/19 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
PHP实现的简单日历类
2014/11/29 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
几行js代码实现自适应
2017/02/24 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
微信小程序常用赋值方法小结
2019/04/30 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
实例说明Python中比较运算符的使用
2015/05/13 Python
python中关于for循环的碎碎念
2017/06/30 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python实现扫雷游戏
2020/03/03 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
个人授权委托书模板
2014/09/14 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL