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中文编码那些事
Jun 25 Python
常见的python正则用法实例讲解
Jun 21 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
Python随机函数库random的使用方法详解
Aug 21 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
PyTorch中permute的用法详解
Dec 30 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
Python reduce函数作用及实例解析
May 08 Python
Python3读写ini配置文件的示例
Nov 06 Python
python如何调用php文件中的函数详解
Dec 29 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
Yii框架中memcache用法实例
2014/12/03 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
canvas时钟效果
2017/02/16 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
MySQL面试题
2014/01/12 面试题
毕业生求职简历的自我评价
2013/10/23 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
中职生求职信
2014/07/01 职场文书
初中毕业生感言
2015/07/31 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android