Python基础入门教程28:企业级开发基础 异常处理
来源:
奇酷教育 发表于:
本节内容如下:什么是异常,对异常的解释和描述,口语描述和专业术语的联系代码中出现错误的处理手段异常处理方式什么样的情况算异常捕获异
本节内容如下:
什么是异常,对异常的解释和描述,口语描述和专业术语的联系
代码中出现错误的处理手段
异常处理方式
什么样的情况算异常
捕获异常【try-except-else-finally】
抛出异常【raise】
常见异常
1. 什么是异常
我们程序在开发过程中,总会遇到各种各样的一些问题,有些是由于拼写、配置、选项等等各种引起的程序错误,有些是由于程序功能处理逻辑不完善引起的漏洞,这些统称为我们程序中的异常
所谓异常:就是不正常的情况,错误和漏洞都是不正常的情况,异常情况有时候也会称呼为BUG,也就是缺陷、漏洞的意思,程序执行过程中出现异常会影响程序的正常执行。
python中内置了一整套完善的异常处理机制,可以让开发人员快速针对出现问题的代码进行完善和处理。
我们针对python可能遇到的不同的异常情况,一般会做如下处理:
如果是拼写、配置等等引起的错误,根据出错信息进行排查错误出现的位置进行解决
如果是程序设计不完善引起的漏洞,根据漏洞的情况进行设计处理漏洞的逻辑;
切记:合理的处理BUG也是程序设计开发的一部分
2. 错误处理
错误的出现,在程序中一般会有两种表现,一种是拼写错误,一种是程序执行过程中出现的错误,这样两种不同的错误应该怎么进行追踪和处理呢?
2.1. 拼写错误
常规情况下,拼写错误只是在简单的记事本等环境下进行开发时,容易手误产生拼写错误;当前开发环境下,我们经常使用一些半自动化的IDE开发工具,如pycharm等等,可以进行简单的程序关键字的拼写检查以及程序结构的检查,把一些简单的拼写问题掐死在萌芽之中
程序设计开发的学习需要经历一个过程,建议开始的基础部分使用超级记事本进行开发,如editplus、ultraedit、sublime等等,对于基础的掌握会有一个非常不错的提升作用;进入后续的企业级项目开发阶段之后可以使用高级开发工具来提升我们的开发效率,如Pycharm、eclipse等等。
2.2. 程序运行时错误
程序运行过程中,也会出现各种各样的错误,对于错误的出现和提示信息必须有一个比较明确的掌握,才能在后续的程序开发中快速的开发并且修复问题,这里就会出现两个步骤
确定问题及问题出现的代码行
后续的问题处理【参考后面的异常处理】
首先我们必须查询问题出现的错误提示信息,观察如下代码
运行结果中出现了错误,错误的名称是AttributeError,错误的提示是'Person' object has no attribute '_Person__names',简单翻译过来就是在Person对象中没有属性_Person__names
仅仅依靠这样的错误提示,我们已经了解到,可能是我们对象的属性操作过程中出现了什么错误,到底出现了什么错误呢?继续观察上面的错误代码:
从错误的第一行代码
3.1. 代码中什么样的情况是异常?
python提供了一套try-except-finally的异常处理代码块,用于针对可能出现问题的代码进行容错和处理
异常处理的语法结构如下:
上述功能的程序设计时,已经考虑了诸多的问题,如用户输入的数据应该是字符串,代码中通过int()方法进行了强制类型转换,在最后输出数据的时候,由于num3是数值,数值和字符串不能直接用符号+连接,所以对num3又通过str()函数强制转换成了字符串。正常情况下,程序没有任何问题。
但是~上述程序的缺陷并非正常流程下,而是~如果用户在应该输入数字的情况下,输入了字母或者其他的非数字字符,程序就出现错误了,这个才是我们要解决的程序的BUG
可以看到,上面通过添加try-except这样的一个代码块,完美的解决了我们出现的错误,不至于让错误导致程序的崩溃
3.2. 异常处理的方式1——捕获异常
异常处理,python中是通过try-except语句代码块来执行处理的
try-except语句代码块处理异常通常有这样几种方式
使用try-except直接包含并处理所有异常
4.使用try-except-except-finally处理异常并在finally中进行后续处理
3.2. 异常处理的方式2——抛出异常
某些情况下,我们捕获到异常信息,如果只是简单的进行处理,对后续的程序可能会造成一定的困扰,举一个简单的操作案例:老板让员工老李去采购一批办公用品
请观察我们之前写过的如下代码:
3.3. 异常处理的方式3——抛出自定义异常
如果系统提供的异常不一定符合我们的需要,如用户登录失败,需要提示一个账号密码有误的异常信息,python中是没有提供这样的异常对象的,需要开发人员自定义异常来进行处理
我们从前面的内容中已经知道,所有的异常对象都是直接或者间接继承自BaseException
所以自定义异常如下:
4. 常见的异常
>>>更多VR/AR入门教程:VR入门