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编码总结(编码类型、格式、转码)
Jul 01 Python
Python导入模块时遇到的错误分析
Aug 30 Python
python实现员工管理系统
Jan 11 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
Python笔试面试题小结
Sep 07 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
Python: 传递列表副本方式
Dec 19 Python
python实现翻译word表格小程序
Feb 27 Python
Python正则表达式高级使用方法汇总
Jun 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
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
微信小程序的引导页实现代码
2020/06/24 Javascript
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python flask框架实现重定向功能示例
2019/07/02 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
执行力心得体会
2013/12/31 职场文书
网络教育自我鉴定
2014/02/04 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
初中生操行评语大全
2014/04/24 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
小马王观后感
2015/06/11 职场文书
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
Python实现打乒乓小游戏
2021/09/25 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers