人生苦短,我选择Python上一篇传送门小白学Python(一):入门小白学Python(二):基本数据类型(上)小白学Python(三):基本数据类型(下)Python初学者入门(四):变量的基本操作Python入门入门(五):基本运算符(上)Python入门入门(六):基本运算符(下)小白学习Python(7):基本流程控制(上)小白学习Python(8):基本流程控制(下)小白学习Python(9):基本数据结构(列表)(上)小白学习Python(10):数据结构基础(列表)(下)小白学习Python(11):数据结构基础(元组)小白学习Python(12):数据结构基础(字典)(上)小白学习Python(13):数据结构基础(字典)(下)小白学Python(14):数据结构基础(集)(上)小白学Python(15):数据结构基础(集)(Part2)小白学习Python(16):基本数据类型(函数)(上)小白学习Python(17):基本数据类型(函数)(下)小白学习Python(18):基本文件操作我们写了这么多之前的示例代码,同学们可能习惯了报错信息,今天我们就来说说报错信息的处理。首先,当程序运行时,出现异常。这时候,我们可能有两种想法。首先是针对这个异常做一些特殊的处理,使程序降级;二是希望程序忽略这个异常继续执行。该异常可能不会干扰主逻辑的执行。这个时候怎么办?有编程经验的同学马上就想到了,来试试吧。在Python中,我们也可以尝试一下。从字面意思就很清楚了。以下内容是尝试执行。语法:try:...(可能产生异常的代码)except:...(产生异常后的处理代码)但是,还会有另一种情况,不管上面的代码有没有错,有一部分代码是我们一直希望能够执行的,这个时候,我们可以再添加一个关键字finally。从字面意思可以看出这是最后要执行的意思。语法:try:...(可能产生异常的代码)except:...(产生异常后的处理代码)finally:...(必须执行的代码)下面开始我们今天的代码演示.让我们先拟定一个场景。我们定义一个除法函数。如果除数不为0,则可以正常返回值。如果除数为0,那么整个程序肯定会直接报错。defdivision(x,y):try:returnx/yexcept:print('程序报错!!!')returnNoneprint(division(15,5))输出结果如下:3.0此时,程序可以正常输出,这时候我们修改调用的参数,改成division(15,0),看输出结果:程序报错!!!None可以看到,这里打印了我在程序中设置的None,并没有抛出之前的红色异常信息。这里的except会捕获我们所有的异常信息,但是异常信息有很多分类,比如我们在访问字典中不存在的键之前遇到的异常KeyError,比如我们刚刚捕获的ZeroDivisionError异常,还有它也是我们之前遇到的数组下标越界时出现的异常IndexError。例如,我可以在此处的代码中捕获更详细的异常信息ZeroDivisionError。defdivision1(x,y):try:returnx/yexceptZeroDivisionError:print('程序报错!!!')returnNoneprint(division1(15,0))输出结果如下:程序报错一个错误!!!None那么,看到这里,你可能会有一个疑问,为什么我们要对异常进行分类,直接抓取所有异常不是更方便吗?当然,对于逻辑比较简单的程序,直接捕获所有异常会更方便,但是在一些特定的业务场景中,一个程序可能会抛出多个异常,我们希望根据不同类型的异常程序定制不同的解决方案,在至少我们知道当前程序抛出了什么异常。这时候,程序异常的分类就显得尤为重要。这里演示一下,如果我们输出的值不是数字,而是字符串。...defdivision2(x,y):try:returnx/yexceptZeroDivisionError:print('你输出的除数是0!!!')returnNoneexceptTypeError:print('你输出的参数类型不合法!!!')returnNoneprint(division2('python',0))输出如下:你输出的参数类型不合法!!!None是对的,你没有看错,可以捕获多个异常信息,并且可以并排写入。至于先抛出哪个,要看哪个异常先发生。由于示例代码逻辑过于简单,无法演示异常抛出顺序,还请见谅(lizhiqizhuang)。上面我们也提到了finally,下面就来演示一下finally关键字的用法。defdivision3(x,y):try:returnx/yexceptZeroDivisionError:print('你输出的除数是0!!!')returnNoneexceptTypeError:print('你输出的参数类型不合法!!!')最后返回None:print('Youmustbeabletoseeme!!!')print(division3(15,3))print(division3('python',0))如你所见,这里我使用异常和normalnone任意题数据测试,结果如下:你一定能看到我!!!5.0你输出的参数类型不合法!!!你一定能看到我!!!None确实可以正常打印finally中的内容。这里还有一点,这里常用的使用方式是关闭一些I/O读写操作或者一些外部连接,比如数据库,缓存服务等,今天的内容就这些。同学们,请回去自己试试看。示例代码本系列所有代码编辑器都会放在代码管理仓库Github和Gitee上,方便大家使用。示例代码-Github示例代码-Gitee如果我的文章对你有帮助,请扫码关注作者的公众号:获取最新干货推送:)
