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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 Python
Python实现视频下载功能
Mar 14 Python
python实现杨辉三角思路
Jul 14 Python
Python实现的快速排序算法详解
Aug 01 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python开根号实例讲解
Aug 30 Python
python中使用np.delete()的实例方法
Feb 01 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
php制作文本式留言板
2015/03/18 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
深入理解Promise.all
2018/08/08 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
python实现堆排序的实例讲解
2020/02/21 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
大客户经理岗位职责
2015/04/09 职场文书
老公出轨后的保证书
2015/05/08 职场文书
党员转正党支部意见
2015/06/02 职场文书
阿凡达观后感
2015/06/10 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL