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 相关文章推荐
跟老齐学Python之大话题小函数(1)
Oct 10 Python
调试Python程序代码的几种方法总结
Apr 28 Python
python实现简单socket通信的方法
Apr 19 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
详解django三种文件下载方式
Apr 06 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
Dec 14 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Django ValuesQuerySet转json方式
Mar 16 Python
Python lxml库的简单介绍及基本使用讲解
Dec 22 Python
java关于string最常出现的面试题整理
Jan 18 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
Ajax PHP分页演示
2007/01/02 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python ansible服务及剧本编写
2017/12/29 Python
Python中join函数简单代码示例
2018/01/09 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
重构Python代码的六个实例
2020/11/25 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
简短大学毕业感言
2014/01/18 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
2015年教师节活动总结
2015/03/20 职场文书
尼克胡哲观后感
2015/06/08 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
辞职离别感言
2015/08/04 职场文书