python3xiaobaike_2020/chapter8/8-1 python3小白课:最基本的异常处理.md
2025-04-20 23:22:14 +08:00

4.0 KiB
Raw Blame History

python3小白课最基本的异常处理

为什么要进行异常处理

我们先来从理论的角度来谈谈学习和恰当使用异常处理的必要性。

在计算机程序编写的时候,没有人能保证自己编写的程序能永远不出错!就连我也不能!

即使保证了编写所有代码的语法全部正确,也没法避免突发情况,比如让用户输入内容的时候,你能保证用户不会输入你无法处理的内容?比如你能保证运行的电脑不会突然出现硬件故障?比如你能保证需要网络的程序,网络不会突然断掉?突发情况是我们无法一一枚举的,这时候脚本直接终止并不是一个好主意。

Tip

对于一个程序的健壮性而言,开发者仅仅做“对”的事是远远不够的,你还要考虑到很多东西,很多方面,有的时候,还需要堵住一些常见的漏洞,对整个过程要有全面的考虑。

当程序运行出现意外情况的时候系统会自动生成一个Error对象来通知程序如果我们没有做异常处理那么程序就会像我们之前看到的那样直接罢工不干如果我们编写了相关的异常处理代码则会进行“错误处理”以便让程序能够继续运行下去。


使用try...except结构捕获并处理异常

异常处理的通用结构语法如下(这是日常我用得最多的一种结构,一般来说,刚开始仅掌握这种结构也基本上够用了):

try:
    # 业务执行代码,这里面可能会有让程序报错的代码,放到这里来
    ...
except Exception as e:
    # 如果在try块的代码中有报错的代码则会执行except块的代码否则不执行
    ...

是不是很像流程控制的赶脚?对的,就是需要注意缩进的。

我们可以将可能出现问题的代码放到try块中如果报错则会执行except块中的代码。Exception是一个通用的异常类,基本上各种异常都基于此类来派生,所以写它一般就可以了,至于其他更高级的应用我们后面课程会讲。as e是把捕获的异常赋值给一个自定义的变量e,当然你也可以写其他的名字,约定俗成一般用这个。这个e我们称之为被赋值后的异常对象通过这个异常对象我们可以获取相关的异常信息。在except块中一般可以print这个值e用来查看具体的异常是什么。关于异常对象,后面的课程中将会有更详细的讲解。

我们来看一个小例子:

# coding:utf-8
try:
    # 除数不能为0所以一定会报错
    a = 1 / 0
except Exception as e:
    print(e)

是不是很简单呢?

[!danger]

有的同学会说那么我们把所有的业务代码都放到try块中不就不会有任何问题了吗我们需要小心的是在try语句块中的代码不要有太多因为过多的代码语句放到try块中出现异常的可能性就会大大增加后续分析异常原因的难度也会大大增加。而且有的时候可能要针对不同的异常类提供不同的处理逻辑关于不同的异常类我们在后面的课程中会讲到这样编程的难度就会增加。

所以我们的原则是写多个try...except块把感觉可能出现异常的程序段落分别写到多个try块里分别捕获不同的异常并针对性处理。对于基本不大可能出现问题的程序段落就像我们往常一样正常写就好了可以不放到异常处理段落里。

单词释义

单词 释义
try 尝试
except 除...之外,这里为异常处理的关键字
Exception 例外
as 把...作为...
division 除法
by 被...
zero