说明
无论在python中,还是在其他语言中,一个重要的事情就是使得程序更加健壮,那么就自然少不了异常处理,今天讨论一下python中几种异常处理方式。
try-except处理异常
python中使用try except finally组合来实现异常捕捉,except中的Exception是所有异常的父类,下面是一个异常处理的示例:
try:
int("aaa")
except IndexError as e: # 捕捉索引异常的子异常,
print("IndexError:",e)
except ValueError as e: # 捕捉value错误的子异常
print("ValueError:",e)
except Exception as e: # 如果上面两个异常没有捕获到,那么使用Exception捕获,Exception能够捕获所有的异常
print("Exception:",e)
else: # 如果没有异常发生,执行else中的代码块
print("true")
finally: # 不管是否发生异常,在最后都会执行finally中的代码,一般用于文件关闭
print("finally")
执行结果:
ValueError: invalid literal for int() with base 10: 'aaa'
finally
raise抛出异常
Exception是所有异常的父类,我们可以自已定义Exception的子类,实现自定义异常处理,下面就是实现例子:
class OldBoyError(Exception): # 自定义错误类型
def __init__(self,message):
self.message=message
def __str__(self): # 打印异常的时候会调用对象里面的__str__方法返回一个字符串
return self.message
try:
raise OldBoyError("我错了...") # raise是主动抛出异常,可以调用自定义的异常抛出异常
except OldBoyError as e:
print(e)
assert断言
python也有断言,用来判断当前环境中的变量是否符合预期,如果不满足,则会抛出AssertionError,以下是例子:
print(123)
assert 1==2 # 断言,故意抛出异常,做环境监测用,环境监测不通过,报错并结束程序
print("456")
执行结果:
123
AssertionError