Python异常处理总结


Posted in Python onAugust 15, 2014

本文较为详细的罗列了Python常见的异常处理,供大家参考,具体如下:

1. 抛出异常和自定义异常

Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

①.raise 语句

Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:

# -- coding: utf-8 --

def ThorwErr():
  raise Exception("抛出一个异常")

# Exception: 抛出一个异常
ThorwErr()

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:

import exceptions

# ['ArithmeticError', 'AssertionError'.....]
print dir(exceptions)

传递异常

捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:

# -- coding: utf-8 --
class MuffledCalculator:
  muffled = False
  def calc(self,expr):
    try:
      return eval(expr)
    except ZeroDivisionError:
      if self.muffled:
        print 'Division by zero is illegal'
      else:
        raise

②.自定义异常类型

Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:

class SomeCustomException(Exception):
  pass

2. 捕捉异常

和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:

# -- coding: utf-8 --

try:
  print 2/0
except ZeroDivisionError:
  print '除数不能为0'

①.捕捉多个异常

在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:

# -- coding: utf-8 --
try:
  print 2/'0'
except ZeroDivisionError:
  print '除数不能为0'
except Exception:
  print '其他类型异常'

为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'

②.获取异常信息

每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception) as e:
  # unsupported operand type(s) for /: 'int' and 'str'
  print e

3. finally子句

finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。

# -- coding: utf-8 --
try:
  print 2/'0'
except (ZeroDivisionError,Exception):
  print '发生了一个异常'
finally:
  print '不管是否发生异常都执行'
Python 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
python3爬取淘宝信息代码分析
Feb 10 Python
python+selenium实现自动抢票功能实例代码
Nov 23 Python
Python基础教程之异常详解
Jan 10 Python
Python向excel中写入数据的方法
May 05 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
python中spy++的使用超详细教程
Jan 29 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
用Python爬取某乎手机APP数据
Jun 15 Python
利用Python多线程实现图片下载器
Mar 25 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 #Python
Python3基础之函数用法
Aug 13 #Python
Python3基础之条件与循环控制实例解析
Aug 13 #Python
Python3基础之基本运算符概述
Aug 13 #Python
Python3基础之list列表实例解析
Aug 13 #Python
Python3基础之基本数据类型概述
Aug 13 #Python
Python常用正则表达式符号浅析
Aug 13 #Python
You might like
PHP安全编程之加密功能
2006/10/09 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
化工工艺专业求职信
2013/09/22 职场文书
小学语文国培感言
2014/03/04 职场文书
安全生产学习心得体会
2016/01/18 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL