代码在运行中出现错误就是异常
print(a)
#运行结果:
NameError: name 'a' is not defined
异常本身也是类,大多数异常的顶级父类是Exception.
异常处理
异常处理语句try except
try: #首先写一个try,然后把可能出错的代码丢进去
print(a)
except NameError as e1: #捕获NameError异常信息储存到变量a中
print(e1) #打印a的内容,也就是错误信息
except Exception as e2: #Exception是所有异常的父类,因此不能放在普通异常之前
print('不确定异常类型')
print(e2)
else: #没有问题就会执行else
print('没有出现错误,程序运行成功')
finally: #有没有问题都会执行finally
print('代码执行完成')
#运行结果:
name 'a' is not defined
Done
在捕获异常的过程中,会从上倒下依次对比异常,找到之后就不会再往后查找
还可以在except后写多个异常类型,统一进行处理
try:
pass
except (NameError,TypeError):
pass
查看报错时,要查看报错原因、报错的行以及执行的代码,通过错误回溯,可以直接查看到这些内容
在请求他人帮助解决问题时,应将如上信息和相应代码发送过去,这样才能帮助你解决问题,节省解决错误的时间
抛出异常raise
raise 可以主动抛出异常
raise TypeError('This is TypeError') #括号中写入报错时提示的信息
#运行结果:
TypeError: This is TypeError
自定义异常类型
通过raise还可以写一个自己的异常类型
class CustomError(Exception):
pass
raise CustomError('This is CustomError')
#运行结果:
__main__.CustomError: This is CustomError
断言 assert
判断真假,表达式返回 True 不报错,表达式返回 False 报错AssertionError
a = 1
assert a==2,'a的值是1' #后面可以加上报错时的提示信息
print(a)
#运行结果:
AssertionError: a的值是1