零基础 |入门python 08:提高程序的稳定性,通常你们都是怎么做的

前言

今天说说Python的异常处理。和其他语言一样,异常处理是Python中一种很常见并且很重要的机制与代码规范。

在实际工作当中见到过很多次这样的情况,因为工程师提交了代码,不过代码某处忘记了异常处理,碰巧这种异常发生的频率不低,所以在代码push到线上后没多久,就会收到紧急通知,服务器崩溃了。

如果事情严重,对用户的影响也很大,那这位工程师还得去专门的会议上做自我检讨,可以说是很惨了。这个事件层出不穷,也告诉我们正确理解和处理程序中的异常尤为关键。因为包含大量的代码块,(文末有福利

错误与异常

通常来说,程序中的错误至少包括两种,一种是语法错误,另一种则是异常。 所谓语法错误就是你写的代码不符合编程规范,无法被识别与执行,
比如下面这个例子:
在这里插入图片描述

If语句漏掉了冒号,不符合Python的语法规范,所以程序就会报错,Invalid syntax。

而异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到错误,抛出了异常,

Python中还有很多其他异常类型,比如key error是指字典中的件找不到,File not found error是指发送了读取文件的请求,但相应的文件不存在等等。在此也不一一的去赘述,可以自行参考相应的文档。

如何处理异常

如果执行到程序中某处抛出了异常,程序就会被终止并退出。这也就是我们所说的异常处理,通常使用TRY和except来解决,比如下面的例子:
在这里插入图片描述

这里默认用户输入以逗号相隔的两个整形数字,将其提取后做后续的操作。如果我们输入A、B,程序便会抛出异常invalid literal for int with base10:‘a’,然后跳出TRY这个block。

由于程序抛出的异常类型是value error和except block所catch的异常类型相匹配,所以except block便会被执行,最终输出value error:invalid literal for int()with base 10:‘a’,并打印出continue。

在这里插入图片描述

我们知道except block只接受与它相匹配的异常类型并执行,如果程序抛出的异常并不匹配,那么程序照样会终止并退出。

所以还是刚刚这个例子,如果我们只输入1,程序抛出的异常,就是index error:list index out of range ,与value error不匹配,那么except block就不会被执行,程序便会终止并退出。
在这里插入图片描述

不过很显然,这样强调一种类型的写法有很大的局限性。那么该怎么解决这个问题呢?

其中一种解决方案是在except block中加入多种异常的类型,比如下面这样的写法:
在这里插入图片描述

或者第二种写法:
在这里插入图片描述

这样每次程序执行时,Except block中只要有一个exception类型与实际匹配即可。

很多时候,我们很难保证程序覆盖所有的异常类型,所以更通常的做法是是在最后一个except block声明及处理的异常类型是exception. exception是其他所有非系统异常的基类,能够与任意非系统异常相匹配。那么代码就可以写成这样:
在这里插入图片描述

或者你也可以在except后面省略异常类型,这表示与任意异常相匹配。
在这里插入图片描述

当程序中存在多个except block时,最多只有一个except block会被执行。如果多个except生灵的异常类型都与实际相匹配,那么只有最前面的except block会被执行,其他则被忽略。

异常处理中还有一个很常见的用法是,Finally经常和try 、except放在一起来用。 无论发生什么情况,Finally block中的语句都会被执行,哪怕前面的TRY和except block中使用了return语句。

一个常见的应用场景便是文件的读取:
在这里插入图片描述

这段代码中,Try block尝试读取file.txt这个文件,并对其中的数据进行一系列的处理。到最后,无论是读取成功还是读取失败,程序都会执行finally中的语句,关闭这个文件流,确保文件的完整性。因此,在finally中,我们通常会放一些无论如何都要执行的语句。

对于文件的读取,我们也常常是用with open,With open会在最后自动关闭文件,让语句更加简洁。

用户自定义异常

自己可以创建异常类型吗?Python也是允许我们可以这么做的。在实际工作当中,如果内置的异常类型无法满足我们的需求,或者为了让异常更加详细可读,想增加一些异常类型的其他功能,我们可以自定义所需异常类型。不过大多数情况下,Python内置的异常类型就足够好了。

异常的使用场景与注意点。

通常来说,在程序中,如果我们不确定某段代码能否成功执行,往往这个地方就需要使用异常处理。比如:

在大型社交网站的后台需要针对用户发送的请求返回相应记录。用户记录往往储存在key value结构的数据库中,每次有请求过来后,我们拿到用户的ID,并用ID查询数据库中此人的记录,就能返回相应的结果。

而数据库返回的原始数据往往是Json string的形式,这就需要我们首先对Jason string进行解码。我们可能会很容易想到下面的方法:
在这里插入图片描述
在json.loads()函数中输入的字符串如果不符合其规范,那么便无法解码,就会抛出异常,因此加上异常处理十分必要。
在这里插入图片描述

但是我们不能走向另一个极端,滥用异常处理。
比如,当你想要查找字典中某个键对应的值时,绝不能写成下面这种形式:
在这里插入图片描述

显然,这样的代码并没有bug,但是让人看了摸不着头脑也显得很冗余。如果你的代码中充斥着这种写法,无疑对阅读、写作来说都是障碍。因此,对于follow control,也就是流程控制的代码逻辑,我们一般不用异常处理

总结

关于Python的异常处理及其使用场景,我们需要重点掌握下面几点

1、异常,通常是指程序运行的过程中遇到了错误,终止并退出。我们通常使用try except语句去处理异常,这样程序就不会被终止,仍能继续执行。

2、处理异常时,如果有必须执行的语句,比如文件打开后必须关闭等等,则可以放在finally block中。

3、异常处理通常用在你不确定某段代码能否成功执行,也无法轻易判断的情况下,比如数据库的连接读取等等。正常的follow control逻辑不要使用异常处理,直接使用条件语句解决就可以了。

小伙伴们如果你也喜欢python,不妨和我一起来学学

零基础Python学习指南

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈


👉资料领取👈

这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加“住隔壁的王叔”,输入"领取资料" 可免费领取全套资料【有什么需要协作的还可以随时联系我】朋友圈也会不定时的更新最前言python知识。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值