Python之异常设计(一)
一 定义
异常分为两类:一类是自动触发异常如除零错误;另一类是通过raise触发。
二 为什么要使用异常
- 当程序运行时,如果检测到程序错误,Python就会引发异常,我们可以在程序中使用try语句捕获异常,并对异常进行处理。如果我们不做异常的捕获,异常就会一直往上层抛出,直到顶层Python的默认异常处理器,默认异常处理器将会停止程序并打印异常,这通常会引起程序崩溃,造成不好的用户体验,这不是我们想要的。
- 一个函数执行到中间某个部分时,出错了如何跳出该函数呢,只能通过抛出异常,让函数跳出该函数,会跳到上一层捕获到异常的地方执行
三 捕获异常
try:
list=[2]
print(list[1]
except IndexError:
print('goto exception')
四 引发异常
try
raise IndexError
except IndexError:
print('goto exception')
raise 传递异常有三种方式
1、raise <instense> 给raise提供一个实例, 当引发异常的时候,如果except中包含了as子句,as 后的变量将会被分配给该实例
2、raise <class> 如果raise一个类,python会调用不带参数的构造函数创建一个被引发的实例
3、raise 用于重新引发异常,如果捕获到异常后,还需要将该异常再往上抛,就可以使用这种方式
五 自定义异常
class MyException(Exception)
pass def raise_error():
raise MyException() try:
raise_error()
except MyException:
print('goto ')
六 终止行为 finally
可以通过finally定义不管是否发生异常都执行的行为。当发生异常时,执行finally块中的代码,然后将异常往上抛。比如,我们想要在调用的函数执行完或发生异常时,释放数据库连接或确保文件关闭,就可以在finally中来实现
try:
raise IndexError
finally:
pass
py2.6和py3引入了with/as语句,as是可选的,可作为try/finally用法的替代。with/as用于执行一些必须“终止”或“清理”的行为,无论是否引发异常都会进行“终止”或“清理”行为
以上是Python异常的基本知识,我将在下一篇进一步探讨异常
Python之异常设计(一)的更多相关文章
- Python标准异常topic
Python标准异常topic AssertionError 断言语句 (assert) ...
- Python 6 —— 异常
Python 6 —— 异常 异常分类 AttributeError:调用不存在的方法 EOFError:遇到文件末尾引发异常 ImportError:导入模块引发异常 IndexError:列表越界 ...
- python 的异常及其处理
Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- JAVA异常设计原则
异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性.可维护性.健壮性都起到至关重要. JAVA根据用处的不同,定义了两类异常 * Checked Exception: Exc ...
- Python标准异常总结
Python标准异常总结 AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d ...
- 19 Python标准异常总结 (转)
Python标准异常总结 AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) ...
- Python标准异常和异常处理详解
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 1.异常处理: 本站Python教程会具体介绍. 2.断言(Asserti ...
- Java-异常机制详解以及开发时异常设计的原则要求
Java-异常机制详解以及开发时异常设计的原则要求 http://blog.csdn.net/Jack__Frost/article/details/52760930?locationNum=6
随机推荐
- jquery源码解析:代码结构分析
本系列是针对jquery2.0.3版本进行的讲解.此版本不支持IE8及以下版本. (function(){ (21, 94) 定义了一些变量和函数, jQuery = function() ...
- Archlinux下virtualbox报错'/sbin/rcvboxdrv setup'
因为刚刚换成archlinux系统,安装virtualbox的时候报错了.如下图: 可是怎么解决呢?我看了很多资料大多数是ubuntu的,没有archlinux的. 但是原理都差不多我借着也就研究出来 ...
- React Native 一些事
ReactJS 是否准备好 有时候我们常常需要监听 ReactJS 的的加载情况. 比如说,当获取一条推送,应用还没有起来,通过点击推送启动应用后,而推送中包含一些我们感兴趣的字段需要处理,我们如果直 ...
- windows10下使用ubuntu,并搭建nodejs环境
1.首先要在win10的设置里打开开发人员使用模式 2.在bash下,下载ubuntu系统 3.安装git,因为要把下载nvm的话,需要git sudo apt-get install git 4.安 ...
- linux开机、重启和用户登陆注销
关机&重启命令 基本介绍: shutdown –h now 立该进行关机 shudown -h 1 "hello, 1 分钟后会关机了" shutdown –r no ...
- 大话AJAX原理
大话AJAX原理 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简单地说 ...
- SimpleITK学习(二)图像读取
通常我会用simpleitk来读取dicom文件,主要是为了将dicom文件转换为numpy矩阵,便于输入神经网络,读取dicom文件可分为两种情况,一.单独的dicom文件 二.一系列dicom文件 ...
- 233 Matrix(矩阵快速幂+思维)
In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...
- amqp模块在python2.7.6版本上报错的问题
机器的环境是python2.7.6; 使用pip install安装了amqp.正常安装,未报错. amqp安装的版本是2.1.4. 在python中,使用import amqp,报错如下: Trac ...
- Paxos算法的通俗理解(转)
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...