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中3种内建数据结构:列表、元组和字典
Nov 30 Python
python按照多个字符对字符串进行分割的方法
Mar 17 Python
详解Django中的权限和组以及消息
Jul 23 Python
浅析Python中的多条件排序实现
Jun 07 Python
python距离测量的方法
Mar 06 Python
python监控进程脚本
Apr 12 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
tensorflow使用指定gpu的方法
Feb 04 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
Python 随机按键模拟2小时
Dec 30 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学习 变量使用总结
2011/03/24 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
php文件上传类完整实例
2016/05/14 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript继承的六大模式小结
2015/04/13 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python修改MP3文件的方法
2015/06/15 Python
python一键升级所有pip package的方法
2017/01/16 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
大学生毕业评语
2014/12/31 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python