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字符串匹配算法KMP实例
Jul 18 Python
Python中内建函数的简单用法说明
May 05 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
Python排序算法实例代码
Aug 10 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
python 实现两个线程交替执行
May 02 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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 魔术方法使用说明
2009/10/20 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
提高PHP编程效率的方法
2013/11/07 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
javascript中clone对象详解
2014/12/03 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
详解Python中with语句的用法
2015/04/15 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
简单了解python变量的作用域
2019/07/30 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
统计系教授推荐信
2014/02/28 职场文书
2014全国两会心得体会
2014/03/17 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
求职自我评价范文100字
2014/09/23 职场文书
政协会议宣传标语
2014/10/09 职场文书
优秀教师个人材料
2014/12/15 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书