版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daihuimaozideren/article/details/80790656
错误类型
编程过程中,通常存在三种错误。语法错误,逻辑错误和异常。
语法错误,通常IDE会给出提示,例如丢失“:”。
逻辑错误和异常,则多是因为设计缺陷造成。逻辑错误的输出,与期望不同。例如缺少了“==”判断时,compare(1,1),将输出“1<1”。而异常则直接叫停程序。
还以compare方法为例,当输入皆为数字时,不会出错。但类型不同时,输出便不那么友好了。例如compare(1,"1"),提示
TypeError: '>' not supported between instances of 'int' and 'str'
这也是因为python变量没有类型的原因造成的。因此,在设计方法时,应加入异常处理,以避免类似情况的发生。
异常处理的格式
我们通过一个例子,看一下异常处理的编写格式。
if __name__ == '__main__':
def compare(a,b):
try:
if(a>b):
print("%d>%d"%(a,b))
elif(a==b):
print("%d=%d"%(a,b))
else:
print("%d<%d"%(a,b))
except:
print("catch a exception")
else:
print("no exception")
finally:
print("function end")
print("")
compare(1,2)
compare(1,"1")
相应输出为
1<2
no exception
function end
catch a exception
function end
try与except间为监听代码段。若存在异常,则执行except内的代码;否则,执行else内的代码。不论是否存在异常,finially代码段都会被执行。此外,else代码段和finially代码段不是必须的。
如果需要catch某种异常,则需要在except中指出异常类型。
A=[1,2,3,4]
def printItemFromA(index):
try:
print("A[%d]="%index,A[index])
except (TypeError,IndexError) as err:
print("exction = ",err)
print()
printItemFromA(1)
printItemFromA(10)
printItemFromA("1")
相应输出为
A[1]= 2
exction = list index out of range
exction = %d format: a number is required, not str
此外,可以存在多个except,只要异常类型不同即可。
如果不知道可能出现哪种异常,则可以不指定,或指定为Exception类型。
A=[1,2,3,4]
def printItemFromA(index):
try:
print("A[%d]="%index,A[index])
except Exception as error:
print("exction = ",error)
print()
printItemFromA(1)
printItemFromA(10)
printItemFromA("1")
自定义异常
有时我们需要定义自己的异常,用于判断一些自己的业务逻辑,并给出辅助性的错误提示。
在自定义异常时,只需要继承Exception,并重写__init__方法即可。
在需要跑出异常时,调用raise myException()即可。
class myException(Exception):
'''
classdocs
'''
def __init__(self, *params):
self.args=params
from demo.obj.myException import myException
if __name__ == '__main__':
def testMyException():
try:
raise myException("test my exception")
except myException as e:
print("myException info is : ",e)
testMyException()
相应输出为
myException info is : test my exception