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中isnumeric()方法的使用简介
May 19 Python
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
django2.0扩展用户字段示例
Feb 13 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
Smarty Foreach 使用说明
2010/03/23 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
超清晰的document对象详解
2007/02/27 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解Python的Django框架中的通用视图
2015/05/04 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
仓库理货员岗位职责
2013/12/18 职场文书
文明礼仪小标兵事迹
2014/01/12 职场文书
领导欢迎词致辞
2015/01/23 职场文书
2016春节放假通知范文
2015/08/18 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers