一.定义 1.错误 错误:程序中难免有错误,错误分为:语法错误和逻辑错误 语法错误是指python语句不符合python的语法要求,在程序运行前就会报错,此时还是处于python编译器的检测阶段。 逻辑错误:例如超出范围、类型错误等等。 2.异常 异常就是程序发生错误是发生的信号,在python中异常如下: 异常由三部分组成:异常类型、异常值、异常追踪信息。 二.常见的异常 在Python中不同的异常可以用不同的类型去标识,不同的异常用不同的类对象标识(python中统一了类和类型,也就是说类型就是类),一种异常标识一种错误。 常用的异常: 三.异常处理 1.什么是异常处理? 当Python解释器检查到错误时就会自动触发异常,当然我们也可以自己控制程序触发异常。所以说,程序员可以编写特定的代码来专门捕抓不同的异常并进行处理(这些代码与程序的逻辑无关,只是与异常处理有关)。如果异常成功被捕抓,则进入另一个处理分支,执行该种异常情况下的逻辑以避免程序崩溃,这种处理逻辑就是我们常说的异常处理。 2.为何要进行异常处理? python解释器在检测到错误时,会导致程序崩溃而不运行之后的代码,此时就会影响程序的正常工作。为了解决此种现象就会考虑到异常处理,通过自己为程序提供一种异常机制来增强我们程序的健壮性和容错性。 例如:在生活中,我们的电脑当CUP等器件温度太高时,电脑就会自动报警并自动关机进行降温处理。 3.如何进行异常处理 异常是由程序的错误引起的,语法上的错误跟异常无关,必须在程序运行前进行修正。 Python为每一种异常定制了一个类型,然后提供看一种特定的语法结构来进行异常处理。 3.1基本语法

try:
	异常检测代码
except 异常类型A:
	发生该A异常时的逻辑代码
except 异常类型B:
	发生该B异常时的逻辑代码
......
else(可省略):
	未发生异常时的逻辑代码
finally(可省略):
	不管是否发生异常,均应执行的代码块
继续其他逻辑代码

3.2当然我们除了使用标准的try-except结构外,还可以使用if-elsif-else来处理异常,但是相对来说,try-except更方便、更简洁,也更规范化,使程序更健壮。try-except可以把错误处理和真正的工作分开来,使代码更易组织、更清晰,使复杂的工作任务更容易实现。 4.万能异常捕抓 从3中,我们发现,如果try中被检测的语句很多,那么可能发生的错误及错误类型就可能会很多,此时就会考虑到很多种except分支来判断异常类型,在实际中会非常麻烦,我们也不可能去一一考虑所有的可能发生的异常类型。这时,我们可以考虑使用一个except来捕抓所有类型的异常,基本结构如下所示:

try:
	被检测的代码块
except exception as e:
	发生异常是执行的代码块
else(可省略):
	未发生异常时执行的代码块
finally(可省略):
	不管是否发生异常,均应执行的代码块
继续其他逻辑代码

见下图: 5.万能异常的使用场景 既然有了万能异常,那么是不是说,在实际编程中,我们就可以使用万能异常来处理所有的异常情况呢? 如果在实际中,我们只需要用一段代码就能处理所有的异常逻辑,那么此时你可以直接使用万能异常来进行捕抓并操作。但是该种操作实际上用的不多。 在实际中,我们往往需要根据不同的异常情况来考虑不同的异常处理逻辑,此时还是老老实实的使用except异常分支来逐次捕抓处理吧! 6.自定义异常 7.主动触发异常 略 四.说明 try-except异常处理应该尽量少用,它本身就是你给程序附加的一种异常处理逻辑,与程序的主逻辑没有关系,异常处理加多了将导致代码的可读性变差。只有在某些异常是无法预知的情况下,才应该加上try--except,其他的逻辑应该自己尽量修正。