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密码小工具
Nov 19 Python
Python类定义和类继承详解
May 08 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
学习python可以干什么
Feb 26 Python
Python基础之函数的定义与使用示例
Mar 23 Python
Flask框架路由和视图用法实例分析
Nov 07 Python
使用python实现飞机大战游戏
Mar 23 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
非常好的php目录导航文件代码
2006/10/09 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
简单的Python2.7编程初学经验总结
2015/04/01 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
Django 用户认证组件使用详解
2019/07/23 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
八一建军节活动方案
2014/02/10 职场文书
简单的项目建议书模板
2014/03/12 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
开天辟地观后感
2015/06/09 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
Python 正则模块详情
2021/11/02 Python