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的*args和**kwargs用法
Nov 01 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
python删除列表中重复记录的方法
Apr 28 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
Apache部署Django项目图文详解
Jul 30 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 Python
最新pycharm安装教程
Nov 18 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 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
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
简单的php文件上传(实例)
2013/10/27 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
Python 爬虫的工具列表大全
2016/01/31 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
python多进程间通信代码实例
2019/09/30 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
Python插件机制实现详解
2020/05/04 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
J2EE面试题
2016/03/14 面试题
单位车辆管理制度
2015/08/05 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL