在Python中所有的异常类都是未指定的錯误exceptionn的子类未指定的错误exceptionn定义在未指定的错误exceptionns模块中,该模块在Python的内建命名空间中不必导入就可以直接使用。
访问未声明的变量会引發NameError异常
当解释器发现语法错误,会引发SyntaxError异常
当使用序列中不存在的索引时,会引发IndexError异常
当使用映射中不存在的键时,会引发KeyError异常
嘗试访问未知的对象属性时,会引发AttributeError异常
Python使用try-except语句处理异常,其中try语句检测异常except语句用于捕获异常。
当try里面的某条语句出现错误的时候就不在继续执行try中的语句,将会执行except里面的异常处理语句
print('程序出现异常——除数为0') print('程序出现异常——为声明变量')如果一个except语句向捕獲多个异常,并使用同一种处理方式:
还有一种就是在except后面使用未指定的错误exceptionn类由于未指定的错误exceptionn类是所有异常类的父类,因此可以捕獲所以异常
有一种情况,不管是否捕捉到异常都要执行一些终止行为
使用raise语句能显示的触发异常,基本格式:
raise 异常类 # 引发异常时会隐式的创建对象
raise 异常类对象 # 引发异常类实例对象对应的异常
raise # 重新引发刚刚发生的异常
当raise语句指定异常的类名时会创建该类的实例对象,然後引发异常
不带任何参数的raise可以再次引发刚刚发生过的异常,作用就是向外传递异常
当使用raise语句抛出异常时,还能给异常指定描述信息
如果要在一个异常中抛出异常,可以使用raise-from
语句
try
里只定义了num
变量没有为其赋值,所以会引发NameError
异常使得程序跳转到except
子句中执行,except
可以捕捉到所有异常并且使用raise-from
抛出异常后在抛出“下标超出范围”的异常。
assert
又称为断言值得时期望用户满足指定额条件。当用户定义的约束条件不满足的时候会触发AssertionError
异常,所有assert
语句可以当做条件式的raise语句
assert后面紧跟着一個逻辑表达式,相当于条件data通常时一个字符串,当表达式的结果为False时作为异常类型的描述信息使用。
assert语句用来收集用户自定义的约束條件而不是捕捉内在的程序设计错误,因为Python会自行收集程序的设计错误会在遇见错误是自动引发异常。
0
捕捉到异常: a不能等于0