出错时 Python 抛出异常
常见类型:ZeroDivisionError 除以零、ValueError 值不合适、TypeError 类型不对、IndexError 索引越界、KeyError 键不存在、NameError 名字未定义、AttributeError 没有该属性。
没有处理的异常会让程序立即终止,并打印 Traceback:从上往下是调用路径,最后一行是错误类型和说明,读错误先看最后一行。
逐步运行预设程序:看异常在哪一行冒出来、沿调用栈向上找 except,finally 何时执行,以及 assert 什么时候会拦下程序。每一步都来自真实 Python 的跟踪。
左侧滑台指向当前行,异常发生时竖旗落下。右侧跳线连到下一步要执行的行,虚线表示这次跳转是异常造成的。右上三个寄存器是调用栈:最上面是正在执行的函数,下面是等它返回的调用者;亮起的警报块标出异常此刻停在哪一层。纸带显示 print 输出,程序因异常终止时会打印 Traceback。
—常见类型:ZeroDivisionError 除以零、ValueError 值不合适、TypeError 类型不对、IndexError 索引越界、KeyError 键不存在、NameError 名字未定义、AttributeError 没有该属性。
没有处理的异常会让程序立即终止,并打印 Traceback:从上往下是调用路径,最后一行是错误类型和说明,读错误先看最后一行。
try 里出错,立即跳到第一个类型匹配的 except,try 里剩下的语句不再执行。except 类型 as e 取得异常对象,except (A, B) 一次捕获多种,父类能捕获子类。
else 在没出错时执行;finally 无论如何都执行,即使 try 里已经 return。没有匹配的 except,异常就沿调用栈继续向上,直到被捕获或程序终止。
raise ValueError('说明') 主动抛出异常;单独的 raise 在 except 中把当前异常再抛出。继承 Exception 可以自定义异常类型。
assert 条件, '说明':条件为假时抛出 AssertionError。不要给条件和说明一起加括号(永远为真)。python -O 会删除所有 assert,所以校验用户输入要用 if + raise,assert 只用于检查程序自身的逻辑。