Python异常
来源:互联网 发布:mac pro强制重启 编辑:程序博客网 时间:2024/06/03 21:33
Python异常
在学习python的过程中,感觉是一门特别容易出错的脚本程序语言,不像C/C++和java在编译的过程中对于语法会有各种检查,尤其是数据类型等,但是在python中,一个变量是可以指向任何类型的,要是编程习惯不好,一不小心就可能造成一些不属于该变量类型的操作,从而引起程序终止。同时,在做一些操作时,例如文件打开等,也可能不成功引发异常等,这个和其他语言一样必须要有异常处理机制。在python中,通过try...except...finally...来进行异常处理。
其中try后面跟的代码块是我们需要执行的正常代码,当try中的代码执行出现异常的时候,会跳转到except,try代码块中的代码就不会再执行,若是正常执行,那么就正常的执行代码。出现异常,执行完except后,如果有finally语句块,则执行finally语句块,然后程序按照正常流程走。若是没有错误发生,所以except语句块不会被执行,但是finally如果有,则一定会被执行。一个python异常处理中可以有多个except,except可以对不同的异常进行分类,从而实现不同的异常处理代码,其用法与C++中的switch case相似,如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句。
如下代码:
a=0
try:
print"trying........"
result=10/a
print"result:%d"%result
exceptZeroDivisionError:
print"Zero Division Error"
else:
print"No Zero Division Error"
finally:
print"finally runing"
当a=0的时候,其结果打印如下:
trying........
Zero Division Error
finally runing
当a=1的时候,器结果打印如下:
trying........
result:10
No Zero Division Error
finally runing
对于产生异常的结果实例保存,可以在except语句的’:’前添加”as变量”或”,变量”
例如:
exceptZeroDivisionErrorase:
或
exceptZeroDivisionError, e:
在上述代码的代码修改如下:
exceptZeroDivisionError, e:
printe.__doc__
print"Zero Division Error"
其结果如下:
trying........
Second argument to a division or modulo operation was zero.
Zero Division Error
finally runing
在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 /。用户代码生成的警告
Python的异常是class,所有的错误类型都继承自BaseException,其具体的继承关系如下图:
当然,当你捕获一个异常的时候,其子类的异常也会被捕获。python用户自己定义异常,例如如下,定义MyErron,继承BaseException,定义errorFunction函数,通过raise产生MyErron异常。在try.....except中,try代码块调用errorFunction函数,except捕获该异常。代码如下:
classMyErron(BaseException):
pass
deferrorFunction():
raiseMyErron()
return
try:
errorFunction()
pass
exceptMyErron:
print"<<<<My Error>>>>>"
else:
print"Np Error"
finally:
print"finally"
代码执行结果为:
My Error
Finally
try...except捕获可以跨越多层调用,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了,如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。这就是为啥在以前写的没有异常处理的代码为何在遇到错误就会报错退出。其跨层调用实例如下,在第三层function产生的异常,在main函数执行的过程中进行捕获。
deffunction():
a=10/0
return
deffunction1():
function()
return
defmain():
function1()
return
try:
main()
exceptZeroDivisionErrorase:
print"Error"
printe.message
其结果如下:
Error
integer division or modulo by zero
- Python 异常
- python 异常
- python 异常
- python异常
- 【Python】异常
- python异常
- python异常
- python异常
- PYTHON-异常
- python异常
- Python 异常
- Python异常
- Python异常
- Python异常
- Python异常
- python 异常
- python 异常
- Python 异常
- Unity编辑器拓展之四:ConsoleWindow中的双击日志定位
- Centos 7 下QT关于arm交叉编译环境的搭建
- hibernate各版本创建sessionfactory(个人使用过)
- 第十一周周末总结+反思
- 对初学Linux的学者的建议
- Python异常
- 享元模式
- 利用selenium+chrome+python爬去加密网站数据
- 软件工程学习总结
- [LeetCode] Reverse Integer
- 396.Rotate Function(M)
- pyqt5 窗口文件示范
- 设计模式之开放封闭原则
- Android第三方框架之学习高德地图SDK-----①集成环境,获取定位信息,地图显示。