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下载FTP上的文件夹的实现代码
Feb 10 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
python访问类中docstring注释的实现方法
May 04 Python
python中的代码编码格式转换问题
Jun 10 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
pycharm全局搜索的具体步骤
Jul 28 Python
opencv读取视频并保存图像的方法
Jun 04 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 checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
如何实现JS函数的重载
2006/09/22 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
Ionic快速安装教程
2016/06/03 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
Python程序设计入门(4)模块和包
2014/06/16 Python
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python实现随机选择元素功能
2017/09/14 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python中scikit-learn机器代码实例
2018/08/05 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
读书之星事迹材料
2014/05/12 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
Java无向树分析 实现最小高度树
2022/04/09 Javascript