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 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode相关的错误
UnicodeDecodeError Unicode解码时的错误
UnicodeEncodeError Unicode编码时错误
UnicodeTranslateError Unicode转换时错误
二:try..except语句处理异常
需要注意的是,静态异常是不能捕捉处理的,必须在编码阶段修正,程序才能正常编译。
对于程序运行过程中的异常,才可以用try...except语句捕捉并处理,使程序可以继续执行下去直到正常退出。
try:
语句块
except 异常类型,e:
处理异常
异常类型必须对应语句块中可能出现的异常,否则捕捉失败;
异常捕捉会捕捉自身类型以及其子类型的异常;
多个except语句顺序捕捉,当某一层捕捉了所有异常时,后面的不执行。所以,except语句块的安排必须合理,如果把BaseException放第一,则会导致下面的其他except语句块永远捕捉不到。
三:try...except...else语句
try:
语句块
except 异常类型,e:
异常处理语句
else:
如果没有捕捉到异常,则执行else的语句
四:try...finally语句
try:
语句块
finally:
try语句块抛出异常后,先执行finally语句进行一些扫尾工作,然后把异常抛出给python解析器
(无论try语句块有无异常,finally语句都会执行,并且一般用于释放资源、关闭流、关闭文件等)
五:try...except...else...finally语句
try:
语句块
except 异常类型,e:
异常处理语句
else:
如果没有捕捉到错误,执行else语句
finally:
最终必须执行的语句,释放系统资源、关闭IO流
六:with...as语句
with...as语句是用来简化try...except...finally语句块的,其实就是把finally语句块里的释放、关闭操作交给了上下文管理器去执行。with...as语句是不进行异常处理的,如果with语句出错,则会抛出异常,所以需要在外层加一个try...except语句处理异常。
完整的使用如下:
try:
with 执行语句 as result:
对result的信息提取、处理
except 异常类型,e:
异常处理
原理:with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。
如果期间出现异常,会先执行__exit__(),再抛出异常。
在我们自定义类时,一个__enter__()方法,一个__exit__()方法。并且把清理资源,关闭文件等等操作放在__exit__方法当中,甚至可以在exit方法中打印异常信息。
之后我们在with语句使用该自定义的类对象时,就会自动调用exit方法进行资源释放。
七:异常的抛出
raise 异常类型,“异常提示信息”
八:断言
assert 表达式,"错误提示信息"
代码执行到断言时,会检测 表达式语句 是否为真,是则继续执行;若为false,则抛出AssertionError并且打印后面的“错误提示信息”。
可以在编码时,在某些需要验证、严格控制的地方,使用断言。然后在调用函数处捕捉异常。
也可以用于某些关键位置的代码调试。
九:标准异常与自定义异常
标准异常:Python内建的异常,可以用程序运行期间触发,然后被捕捉处理。
自定义异常:可以自定义一些异常,然后在代码中针对某些情况用raise语句抛出,然后在上层捕捉处理。
自定义异常类必须继承Exception类或其子类。
class MyException(Exception)://自定义异常类
def __init__(self,info)://构造函数,传进来一个异常提示信息
self.info=info
def __str__(self)://tostring函数,用于打印异常
return self.info raise MyException("错误信息")//手动抛出异常 try:
语句块
except MyException,e:
print e //打印异常
Python学习笔记五:错误与异常的更多相关文章
- Python学习笔记七-错误和异常
程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Pyt ...
- python学习笔记014——错误和异常
Python有两种错误很容易辨认:语法错误和异常. 1 什么是语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 if i>4 print("if语句输出 ...
- Python学习笔记13—错误和异常
常见的异常:
- Python学习 Part6:错误和异常
Python学习 Part6:错误和异常 两种不同类型的错误:语法错误和异常 1. 语法错误 语法错误,也被称作解析错误: >>> while True print('Hello w ...
- Python 3 学习笔记之——错误和异常
1. 语法错误 Python 的语法错误被称为解析错,语法分析器会指出出错的代码行,并且在最先找到的错误的位置标记一个小小的箭头. >>> while True File " ...
- Python入门笔记(17):错误、异常
一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序 ...
- python学习笔记五 模块下(基础篇)
shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
随机推荐
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
其实这个不是什么新东西了,在介绍(一)中我们就知道了PullToRefreshListView的用法,这里只要将其放入到ViewPager中就行啦.ViewPager还是和以往一样的定义和使用,在适配 ...
- 要恢复页面吗?Chrome未正确关闭
谷歌chrome浏览器每次打开提示"要恢复页面吗"怎么办? 谷歌chrome浏览器每次打开提示"要恢复页面吗"怎么办? 如下图所示: 每次打开启动谷歌chrom ...
- Android JNI中C和JAVA代码之间的互相调用
关于Android studio中使用NDK/JNI环境和入门:http://blog.csdn.net/quan648997767/article/details/64923143 1. C代码回调 ...
- cesium原理篇(二)--网格划分【转】
转自:http://www.cnblogs.com/fuckgiser/p/5772077.html 上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格 ...
- 0mq 入门 (转)
最近做后台发现很多地方需要队列,我用东西一般有两个要求: 1) 够傻够简单. 2) 有源码,能看又能改. 最后相中了0mq,下面介绍如何安装和写个简单的例子.一. linux平台: ...
- Error: MDM failed command. Status: Only a single SDC may be mapped to this volume at a time
映射一个volume到多个SDC的时候报错如下: Error: MDM failed command. Status: Only a single SDC may be mapped to this ...
- C++_友元函数总结(转)
原文地址:http://blog.csdn.net/insistgogo/article/details/6608672 1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 ...
- Android -- Handling back button press Inside Fragments
干货(1) 首先创建一个抽象类BackHandledFragment,该类有一个抽象方法onBackPressed(),所有BackHandledFragment的子类在onBackPressed方法 ...
- 技能|三次简化一张图:一招理解LSTM/GRU门控机制
作者 | 张皓 引言 RNN是深度学习中用于处理时序数据的关键技术, 目前已在自然语言处理, 语音识别, 视频识别等领域取得重要突破, 然而梯度消失现象制约着RNN的实际应用.LSTM和GRU是两种目 ...
- VC++ MFC应用程序项目文件
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Bu ...