# python3小白课:最基本的异常处理 ### 为什么要进行异常处理 我们先来从理论的角度来谈谈学习和恰当使用异常处理的必要性。 在计算机程序编写的时候,没有人能保证自己编写的程序能永远不出错!就连我也不能! 即使保证了编写所有代码的语法全部正确,也没法避免突发情况,比如让用户输入内容的时候,你能保证用户不会输入你无法处理的内容?比如你能保证运行的电脑不会突然出现硬件故障?比如你能保证需要网络的程序,网络不会突然断掉?突发情况是我们无法一一枚举的,这时候脚本直接终止并不是一个好主意。 > [!tip] > > 对于一个程序的健壮性而言,开发者仅仅做“对”的事是远远不够的,你还要考虑到很多东西,很多方面,有的时候,还需要堵住一些常见的漏洞,对整个过程要有全面的考虑。 当程序运行出现意外情况的时候,系统会自动生成一个Error对象来通知程序,如果我们没有做异常处理,那么程序就会像我们之前看到的那样直接罢工不干,如果我们编写了相关的异常处理代码,则会进行“错误处理”,以便让程序能够继续运行下去。 --- ### 使用try...except结构捕获并处理异常 异常处理的通用结构语法如下(这是日常我用得最多的一种结构,一般来说,刚开始仅掌握这种结构也基本上够用了): ```python try: # 业务执行代码,这里面可能会有让程序报错的代码,放到这里来 ... except Exception as e: # 如果在try块的代码中有报错的代码,则会执行except块的代码,否则不执行 ... ``` 是不是很像流程控制的赶脚?对的,就是需要注意缩进的。 我们可以将可能出现问题的代码放到try块中,如果报错则会执行except块中的代码。`Exception`是一个通用的异常类,基本上各种异常都基于此类来派生,所以写它一般就可以了,至于其他更高级的应用我们后面课程会讲。`as e`是把捕获的异常赋值给一个自定义的变量`e`,当然你也可以写其他的名字,约定俗成一般用这个。这个`e`我们称之为被赋值后的异常对象,通过这个异常对象我们可以获取相关的异常信息。在except块中,一般可以print这个值`e`用来查看具体的异常是什么。关于异常对象,后面的课程中将会有更详细的讲解。 我们来看一个小例子: ```python # 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 | 零 |