day15——异常常用形式、异常处理方法、raise关键字的使用

异常既是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。

一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。最常用异常的形式

a) 异常的常用形式

我们平时工作中最常用到的异常处理的形式:

try:

正常的操作

..........

except

发生异常,执行这块代码

......

else:

如果没有异常执行这场代码

finally:

不管如何,最后一定要执行的代码


1 try:
 2     a = 10
 3     b = 0
 4     a/b
 5 except Exception as e:
 6     print(e)
 7     print(‘Error‘)
 8 else:
 9     print(‘This is OK!‘)
10 finally:
11     print(‘END‘)
12
13 #object 这个是所有类的基类
14 #Exception 这个类是所有异常类的基类
15
16 a = [1,2,4]
17 try:
18     print(a[4])
19 except IndexError as e:
20     print(e)

打印结果为:

异常处理方法:

Excepthion是所有的异常基础类(),对于Python的标准异常,我们列出如下,以做参数:

异常名称 描述
   
BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

raise关键字的使用

raise用来触发异常

语法如下:

raise [Exception [,args[,traceback]]]

语句中Exception是异常的类型(例如 NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是None

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象

 1 try:
 2     10 / 0
 3 except Exception as e:
 4     print ‘aaaaaa‘, e
 5     raise e
 6 else:
 7     print(‘OK‘)
 8 finally:
 9     print("finally")
10 print("hello world")

打印结果为:

解释:

raise 关键字就是捕获到异常,并抛出。程序运行终止。但是 finally还是会执行的,所以最后的hello world没有打印出来。

时间: 2024-10-29 19:10:49

day15——异常常用形式、异常处理方法、raise关键字的使用的相关文章

IOS捕获异常,常用的异常处理方法。

前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的一面.其实OBJECT-C的异常处理方法和JAVA的雷同,懂JAVA的朋友一看就懂.我为什么要写这篇博文呢?因为我发现百度上的介绍方法,很多都不是我想要的,而我想要的又说得不清楚,重点是大家都是直接复制别人的代码...于是不多说,大家往下看--- 以下程序已测试并通过: 设备:IOS8模拟器中 开发工具:XCode6.1 使用@try.catch捕获异常: 以下是最简单的代码写法,其中@finally可以

iOS开发随笔--iOS捕获异常、常用的异常处理方法

在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的体验.其实Objective-C的异常处理方法和 JAVA的雷同,懂JAVA的朋友一看就懂.我为什么要写这篇博文呢?因为我发现百度上的介绍方法,很多都不是我想要的,而我想要的又说得不清楚,重点是 大家都是直接复制别人的代码...于是不多说,大家往下看--- 原文地址:http://www.cocoachina.com/ios/20141229/10787.html 以下程序已测试并通过: 设备:iOS 8模拟器

iOS捕获异常,常用的异常处理方法

本文转载至 http://www.cocoachina.com/ios/20141229/10787.html 前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的体验.其实Objective-C的异常处理方法和JAVA的雷同,懂JAVA的朋友一看就懂.我为什么要写这篇博文呢?因为我发现百度上的介绍方法,很多都不是我想要的,而我想要的又说得不清楚,重点是大家都是直接复制别人的代码...于是不多说,大家往下看--- 以下程序已测试并通过: 设备:iOS 8模

PL/SQL异常处理方法

1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: 1:异常类型 2:错误代码 3:错误信息 通过处理异常我们能够确保PL/SQL块不突然的异常退出. 2:异常处理的结构 DECLARE Declaration section BEGIN Exception section EXCEPTION WHEN ex_name1 THEN -Error handling stateme

点评阿里JAVA手册之异常日志(异常处理 日志规约 )

下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:异常处理 日志规约 本文难度系数为一星(★) 本文为第三篇 第一篇 点评阿里JAVA手册之编程规约(命名风格.常量定义.代码风格.控制语句.注释规约) 第二篇 点评阿里JAVA手册之编程规约(OOP 规约 .集合处理 .并发处理 .其他) 码出高效.码出质量. 代码的字里行间流淌的是软件生命中的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升质量意识

迭代器,生成器,生成器表达式,常用内置方法

迭代器 迭代器的定义:迭代器指的是迭代取值的工具,迭代是一种重复的过程,每一次重复都是基于上一次的结果而来单纯的重复不是迭代.比如:while的死循环打印同一个值就不是迭代. l=['a','b','c'] i=0 while i < len(l):      print(l[i])      i+=1 这个while循环每一次取值都是基于上一次的结果往下进行,这就是一个迭代的过程. 迭代器的使用原因:迭代器提供了一种通用的且不依赖索引的迭代取值的方式 迭代器的使用方式 特点:可迭代的(iter

【转载】Perl异常处理方法总结

程序脚本在运行过程中,总会碰到这样那样的问题,我们会预知一些问题并为其准备好处理代码,而有一些不能预知.好的程序要能尽可能多的处理可能出现的异常问题,本文就总结了一些方法来解决这些异常,当然perl在这个处理了不及其它同类语言,但也不会差到那里.在开始前,我们先盘点一些关于perl的优缺点. 0. 历史太悠久了.你可以在1997年的计算机上找到perl5.0.(只是吐槽一下,历史悠久没什么不好,与时俱进才是关键) 1. 不回收循环垃圾(这是个硬伤,也许和Perl设计的初衷有关,小脚本影响不大:但

Java中常用的异常处理情况及关于开发中异常处理的建议

本周四老师由一个简单程序将问题引出,讲授了Java中异常处理的情况.根据课件内容及上网查阅资料,将关于JAVA项目中的常用的异常处理情况总结如下: 首先什么是异常(Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象.异常处理的目的是依据实际情况提供不同的错误应对策略与手段,使程序更稳定,更安全.异常处理的主要用途是提供准确的错误消息,解释失败的原因.位置和错误类型等,同时提供一定的恢复能力,尽可能地保证数据完整性不被

JAVA项目中的常用的异常处理情况

在网上查阅了相关资料得出了以下JAVA项目中的常用的异常处理情况总结: 1.不要捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类,如:IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查违法来规避,保证程序健壮性. 2.异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低.这个坑大家要注意了. 3.对大段代码进行 try-catch,这是不负责任的表现. catch 时请分清稳定代