python3基础之异常处理(通俗易懂)

什么是异常?

异常顾名思义就是不正常的情况,比如说用一个数去除以0,就是一个不正常的情况:

image.png

例子中用1除以0,结果出现了异常ZeroDivisionError。出现异常后程序就崩溃了,对于用户而言最不喜欢看到的就是程序崩溃了。因此处理异常是一件十分必要的事情。


基本的异常处理

python处理异常的基本结构如图所示:

image.png

异常处理的代码结构由try和except,可以理解为尝试运行try底下的代码,如果捕捉到except后面指定的异常类型,则在底下进行相应的处理。处理了异常程序就不崩溃了(除非你手贱,在处理异常的地方又写错了代码)。except可以有多个用于捕获不同类型的异常。


带else的异常处理

异常处理后面可以加else。如果没有捕捉到异常那么就会执行else后面的代码:

image.png

else的用法应该很好理解。但是这里所说的没有捕捉到异常并不代表一定就没有异常,而是没有捕捉到你except后面的异常,换句话说只是没有执行你的except而已。


带finally的异常处理

在异常处理的结构中,不管是不是捕捉到异常,finally底下的代码始终都会执行,即使没有处理异常程序崩溃了它都要执行:

image.png

finally很适合用来收尾工作,比如在try中打开了一个excel文档,然后在后面的执行中可能出现了异常崩溃了,这时excel文档就会处于锁定的状态。这种情况就可以在finally中执行关闭excel的操作。


手动抛出异常

手动抛出异常在学些迭代器的时候时已经见识过了,当时为了防止迭代器访问越界,手动抛出了StopIteration的异常。这里还是延续上面的例子进行说明:

image.png

只要使用raise就能抛出异常了,抛出异常后面的代码将不再执行。


自定义异常

python已经内置了很多的异常类型,但有时我们还是有自己特殊的需求。那就自定义异常吧。自定义异常的方式就是从内置的异常类中派生一个类来扩展自己的需求,举个例子:

image.png

只要学会了python的类,是不是自定义异常类就变得很简单了?


演示站
上一篇:python3基础之生成器
下一篇:python3基础之break、continue和pass

发表评论