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 26 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
python字符串连接方法分析
Apr 12 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
Python 加密的实例详解
Oct 09 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
python3去掉string中的标点符号方法
Jan 22 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
python retrying模块的使用方法详解
Sep 25 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 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 IPV6正则表达式验证代码
2010/02/16 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
PHP间隔一段时间执行代码的方法
2014/12/02 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
javascript每日必学之继承
2016/02/23 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
python分数表示方式和写法
2019/06/26 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
物流仓管员工作职责
2014/01/06 职场文书
实习生的自我评价
2014/01/08 职场文书
文明教师事迹材料
2014/01/16 职场文书
调任通知
2015/04/21 职场文书
幼儿园六一主持词
2015/06/30 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫