概述
有时候代码写错了,执行程序的时候,执行到错误代码的时候,程序直接终止报错,这是因为python检测到一个错误时,解释器就无法执行了,出现了错误的提示,这就是异常。
示例
语法格式
try:
可能出现错误的代码块
except:
出错之后执行的代码块
else:
没有出错的代码块
finally:
不管有没有出错都执行的代码块
try……except语句
将可能出错的代码放到try里面,except可以指定类型捕获异常。except里面的代码是捕获到异常时执行,将错误捕获,这样程序就不会因为一段代码包异常而导致整个程序崩溃。
示例
捕获ZeroDivisionError异常
实操
在正常执行的时候,如果第一句出错那么整个程序都不会再执行下去,会直接在错误的地方停止报错
这样出现错误就停止使得检错工作异常麻烦,所以我们可以使用try……except函数,这样也会报错,但会继续运行下面的语句
但下面这种错误会直接跳出来,为什么呢?
这是因为我们在except之后指定了是NameError 类型,但这个错误是IndexError类型的,所以并没有捕获到。
错误类型是可以写很多个多次叠加的
小结
except在捕获错误异常的时候,只要根据具体的错误类型来捕获的。
用一个块,可以捕获多个不同类型的异常。
python中内置的错误类型
有没有一种方法可以捕获所有异常呢?(因为可能存在不知道是什么异常的情况)
不需要在每个可能出错的地方去捕获,只要在合适的层次去捕获错误就可以了,这样的话,就大大减少了我们写try……except的麻烦
如果不使用try……except函数呢?
这种报错会显示函数的运行逻辑。
异常的抛出机制
如果在运行时发生异常,解释器会查找相应的异常捕获类型;如果在当前函数里面没有找到的话,它会将异常传递给上层的调用函数,看能否处理;如果在最外层没有找到的话,解释器就会退出,程序就会down掉
try-except-else函数
但如果try里面语句正确运行
则else里面的语句就会运行
try-except-finally函数
当try模块没有错误时
finally里面的代码块仍然正常运行