python 异常处理时raise的使用
raise的作用:
在使用try … except … finally 结构来处理异常的过程中,可以分为两种情况:
不使用raise:程序记录异常,但正常执行下面的语句,直到结束
使用raise:raise语句会抛出错误的实例,同时打断程序的执行,在这一类下面也分两种情况:
- 其如果不带参数,就会把当前错误原样抛出
- 若其带参数,则可以将当前错误类型转化成另一种错误类型抛出
实例:
1. 不使用raise:
# -*- coding: utf-8 -*-
'''
功能:不使用raise,测试程序运行情况
作者:smileZenvo
'''
def example(inpute):
try:
result = 10 / inpute
except Exception, e:
print Exception, ':', e
a = 10
print 'a =', a
if __name__ == '__main__':
example(0)
运行结果:
结果分析:
- 不使用raise抛出异常,而是在except后面自己打印所带的异常
- 程序并不会被终止,后面变量a的赋值和打印正常执行
2. 使用raise:
2.1 不带参数:
# -*- coding: utf-8 -*-
'''
功能:使用raise(不带参数),测试程序运行情况
作者:smileZenvo
'''
def example(inpute):
try:
result = 10 / inpute
except Exception, e:
print Exception, ':', e
raise
a = 10
print 'a =', a
if __name__ == '__main__':
example(0)
运行结果:
结果分析:
1. 程序在raise抛出异常后停止运行,并没有执行下面的变量a的赋值和打印
2. raise抛出了函数的异常,与我们自己打印的异常相同,均为integer division or modulo by zero, 即:0被除了
2.2 带参数:
# -*- coding: utf-8 -*-
'''
功能:使用raise(带参数),测试程序运行情况
作者:smileZenvo
'''
def example(inpute):
try:
result = 10 / inpute
except Exception, e:
print Exception, ':', e
raise ValueError
a = 10
print 'a =', a
if __name__ == '__main__':
example(0)
运行结果:
结果分析:
使用raise抛出异常且带参数时,我们发现:
1. 程序在raise抛出异常后停止运行,并没有执行下面的变量a的赋值和打印
2. 带参数时,raise会不管函数的异常,直接抛出参数所带的异常(如: 这里的异常应该是0不能被除,但却抛出的raise后面的value异常)
3. 所以在使用带参数时要注意,一般raise后面带参数,可以抛出我们自己定义的异常类型