网络编程
位置:首页>> 网络编程>> Python编程>> Python保姆式手把手带你掌握异常的捕获和处理

Python保姆式手把手带你掌握异常的捕获和处理

作者:退休的龙叔  发布时间:2022-04-30 14:10:18 

标签:Python,异常的捕获和处理,Python,异常报错

👀前言

代码出现异常而报错再正常不过了,但为什么要处理异常?

由于异常的存在,代码运行时会出现一大堆的红色字体提示,对于程序员还好,见红色报错见多了习惯了,但如果你开发出来的东西要给别人看,那么不懂代码的人就会一脸懵逼,对产品的印象都不太好了。

比如我们经常简单网页丢失的情况,其实是就是网页代码执行时发生了异常,但有的网页还是很个性的,提示的信息可能是比较人性化的,比如CSDN你收藏的文章被后台删除了,导致直接跳到这个界面的代码无法执行,此时的报错信息是这样的:

Python保姆式手把手带你掌握异常的捕获和处理

但有些产品在开发时想得并不是那么周到,没有体会用户端的感受,结果某个程序出错了,用户能看到一堆报错代码,好感度直线下降。

Python保姆式手把手带你掌握异常的捕获和处理

首先这篇文章所讲的异常不是指教你如何让代码不报错,代码异常出错得进行调试来解决,这不是我们这里的重点,今天的重点是在代码可能报错的地方进行优化和个性化,让错误看起来也比较和谐。

其次这也是Python新手入门教程系列文章的一个重要板块,可以给以后的开发奠定良好的异常处理基础,代码总会有异常,但有的异常在别人看来却毫无违和感,这都来源于拥有扎实的异常捕获基本功。

Python保姆式手把手带你掌握异常的捕获和处理

⚡一、异常的定义

异常是一个事件,该事件在程序执行过程中发生,影响程序的正常执行。一般情况下,Python无法正常处理程序时就会发生一个异常。

例如我在代码中只写了一个变量a,运行程序,pycharm无法识别这个变量,所以报错,便是出现了异常。

Python保姆式手把手带你掌握异常的捕获和处理


🙊二、异常的处理

所以我们需要掌握处理异常的方法,处理异常的方法有很多种,接下来我们一个个来看。

1.try-except

它能够将可能出错的代码进行处理,处理后报错的红色字体将会转换成简短的、正常的字体,用法如下:


try:
   有可能出现异常的代码
except 异常类型 as 变量
处理后的代码

举例:直接打印变量a会报错。

Python保姆式手把手带你掌握异常的捕获和处理

经过tyr-except处理过一下:


try:
   print(a)
except NameError as s:
   print(s)

再次运行看效果:

Python保姆式手把手带你掌握异常的捕获和处理

飘红的报错信息变得简短且颜色正常,看起来这个异常是不是显得舒服多了?

这里的tyr-except并不影响代码的运行,如果你的代码没有报错,你就算是写了tyr-except,它也只会执行try那行代码,那行代码没有错误,那就不会执行except里面的代码。

例如我们来一个正常的:

Python保姆式手把手带你掌握异常的捕获和处理

2.try-except-except

这种方法和前面的try-except写法是差不多的,只是后面再增加了一个except,可用于判断多种可能报错的情况。

例如:有两行代码可能会报错,两种不同类型的异常,但不想让它飘红。


try:
   1 / 0
   print(a)
except NameError as s:  # 第一种写法,用as+变量
   print(s)
except ZeroDivisionError:  # 第二种写法,自定义输出内容
   print("除数不能为0")  # 自定义输出的内容

运行结果:

Python保姆式手把手带你掌握异常的捕获和处理

虽然报错,但没有飘红,这里注意一下except的两种写法。

try-except的写法很灵活的,我们同样可以用元组把可能报错的异常类型囊括进去,避免写多行except,例如:

Python保姆式手把手带你掌握异常的捕获和处理

3.try-except-else

如果没有异常,则执行else里面的代码,例如:

Python保姆式手把手带你掌握异常的捕获和处理

4.try-except-finally

不管代码是否有异常,最后都会执行finally里面的代码。例如:

Python保姆式手把手带你掌握异常的捕获和处理

5.顶层类Exception

except后面其实可以不加错误类型,因为系统会默认认为后面的错误是类型是Exception,这是1个顶层类,包含了所有的出错类型。

Python保姆式手把手带你掌握异常的捕获和处理

🙈三、自定义异常

有没有发现,前面我们去做基本的异常捕获时,每次可能出错的地方就得写一个try-except,如果有多个地方可能会出错呢?是否我们需要写多个try-except?又或者理论上代码可以运行,但我想定一下规矩,凡是不符合我规矩的行为,我都让它出现异常,比如密码长度超出我规定的长度,我想让程序出现异常。

自定义异常可用于引发一个异常(抛出一个异常),由关键字raise引发。

举例:模拟用户输入密码的情景,用户输入的密码不能低于6位数,自定义一个异常,用于检测用户输入的密码是否符合规定,不符合则引发异常,提示当前输入的密码长度和最小密码长度不能低于6位数。


class MyError(Exception):  # 异常捕获的类
   def __init__(self, length, min_len):  # length为用户输入的密码长度,min_len为规定的最小长度
       self.length = length
       self.min_len = min_len

# 设置抛出异常的描述信息
   def __str__(self):
       return "你输入的长度是%s,不能少于%s" % (self.length, self.min_len)

def main():
   try:
       con = input("请输入密码:")  # 获取用户输入的密码
       l = len(con)  # 获取用户输入的密码长度
       if l < 6:
           raise MyError(l, 6)  # 长度低于设定的6位数则引发异常
   except Exception as ss:  # 有错误则提示
       print(ss)
   else:
       print("您的密码输入完毕")  # 没有错误则执行

main()

运行结果:

Python保姆式手把手带你掌握异常的捕获和处理

从上面的代码中我们又用到了之前面向对象板块里面的类和实例对象的知识,忘记的赶紧去复习吧,除此之外,这里还结合了前面的try-except,还有我们的关键字raise引起异常捕获。

💤结语

来源:https://blog.csdn.net/zhiguigu/article/details/120451048

0
投稿

猜你喜欢

  • 我们在编写 Javascript 时,Debug 是很痛苦的过程,而且有些语法问题虽使用 Firebug 能很快定位,但毕竟影响效率。这里有
  • InstrRev描述:返回某字符串在另一个字符串中出现的从结尾计起的位置。语法:InstrRev(string1, string2
  • 本文实例讲述了JavaScript导出Excel的方法。分享给大家供大家参考。具体实现方法如下:<html xmlns="h
  • 引言微信群的用户添加逻辑是 —— 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉
  • 利用XMLHTTP无刷新自动实时更新数据,2秒自动刷新一次,2秒取得一次数据.demo.htm 前台显示<script la
  • 之前写过的组织结构和组织体系都太抽象了,读到标签系统我才有那种“略懂”的感觉。哈哈…书上提到的标签包括:导航情境式链接:常见的“更多”这种用
  • 当我们在使用validate等方法进行验证时,如果是错误,则会返回首页1、直接在请求头中在请求头header中,accept使用appcli
  • 前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样
  • 一、测试模型下面这部分来自于某书籍资料,拿过来,按需参考一下:测试模型(1)线性测试1、概念:通过录制或编写对应应用程序的操作步骤产生的线性
  •  <%Dim sc4Json Sub InitScriptControlSet sc
  • 很多时候我们写的程序,会花上一分钟甚至几分钟时间。为了使软件使用者能够耐心的等待程序的执行,我们经常会希望有一个进度条来表示程序执行的状态。
  • PHP使用星号替代用户名手机和邮箱这个在许多的活动界面会看到如淘宝的购物界面中的一些客户的支付宝号都是隐藏掉的哦,下面我们来看一下它的使用方
  • 今天在看框架的时候无意间看到了document.compatMode,经过一番资料查找,终于搞懂了。文档模式在开发中貌似很少用到,最常见的是
  • 最近在做python的web开发(原谅我的多变,好东西总想都学着。。。node.js也是),不过过程中总遇到些问题,不管是web.py还是d
  • centos下安装配置phpmyadmin,我花了二个晚上,郁闷的我不行,配置phpmyadmin简单吧,很简单,我刚工作的时候,就配置过,
  • 认知心理学家Donald A. Norman将人类的行动分解成七个阶段:1. 确定目标2. 确定意图3. 明确行动内容4. 执行5. 感知外
  • --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库
  • 一、常见的异常1、NameError 未定义变量异常print(a)# 输出:NameError: name 'a' is
  • 和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试A
  • 想做个和IBM公司一样的网站LOGO,试了半天也没有做出来,郁闷之下,只好求高手帮助!先在这里谢谢了!方法一1、写上IBM,调节字号颜色2、
手机版 网络编程 asp之家 www.aspxhome.com