1.概述
在前面的学习过程中,我们或多或少都遇到了Python解释器抛出的异常。
异常(Exception),是程序运行过程由于出现意外到比如语法错误、代码逻辑有问题、与系统资源冲突等产生错误情况,从而影响程序正常执行的现象。
常见的异常分为两种
- 语法错误
语法错误,指的是当代码不符合Python语法规则时,Python解释器在解析是就会报SyntaxError语法错误。与此同时还会明确指出最早探测到错误的语句
Python解释器对于语法错误是无法容忍的,必须要将程序中的所有的语法错误全部纠正,程序才能正常进行
例如打印JueJing字符串
print "JueJing"
print方法由于Python3不支持Python2的写法,就会报以下错误
print "JueJing"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("JueJing")?
-
运行时出错
当一个程序发生异常时,代表该程序在执行时出现了非正常的情况,无法再执行下去
例如我们进行除法运算,都在知道 0 不能作为除数,所以执行 10/0,我们程序就会报错误,异常中止程序运行。
print(10/0)
ZeroDivisionError: division by zero
2.异常介绍
Python异常指程序运行过程中出现非正常现象,例如用户输入错误,除数为零、需要处理的文件不存在、数组下标越界等
Python内部程序出现异常,默认是会中止程序继续执行的
但是,如果我们现在的需求是期望程序遇到异常能够继续安全地执行下去,要怎么做呢?
这是时候就有了异常处理的概念,那什么是异常处理?
异常处理顾明思议,就是程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。
Python 中,引入了很多来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法,
Python中内创建异常类的继承层次:
3. 异常本质
在Python中我们可以使用try....except...
语句进行捕获并处理未知异常。格式如下
try:
可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]:
处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
处理异常的代码块2
except [Exception]:
处理其它异常
- 正常的代码放在try和except之间,异常的信息放在except块中进行处理。
那我们来看一下,try语句怎么工作的?
- 首先程序开始执行try块里面业务逻辑代码语句过程中
- 如果没有异常发生,系统会会略except子句,try块代码执行后结束
- 如果在try块的代码发生异常时,系统会自动生成一个异常对象,该异常对象会被提交给Python解释器,于此同时,try块里面剩余的代码会被忽略(抛出异常)
- Python解释器收到异常对象时,会去寻找处理该异常对象的except块。
- 如果找到合适的except块,会把该异常对象交给该except块处理(捕获异常)
- 如歌Python解释器找不到捕获异常的except块,则运行时环境终止,Python解释器也退出来
重点来啦:
- 一个try语句可以包含多个except块,分别来处理不同的特定的异常
- 最多只有个一个分支会被执行
- 处理程序只针对对应try语句中异常处理,而不是其他的try处理程序中的异常
- 一个except块可以同时处理多个异常,这些异常被放except()括号里成为一个元组
- 一个except块可以忽略异常名称,它将被当作通配符使用
我们来举个例子?:
try:
a = 10/0
except Exception:
print("除数不能为0,请检查数据")
4. 异常解决的态度
我们了解了基本Python的异常处理方法和优点。
在工作中,面对代码的异常我们不必要太去惊慌,我们可以按照如下建议去解决异常情况
- 不惊慌,细看信息,定位错误。看清楚报的错误信息,并定位发生错误的地方
- 百度并查看相关的贴子和博客,将异常类信息进行百度,至少查看十个以上的相关博客
- 查看网上的资料都无法解决,可以找周围的同事进行协助帮忙查看去解决问题
积累经验后,我们就可以应对常见的异常报错信息
同时,我们在进行异常处理时,要遵循三点
-
不要过度使用异常
主要表现两个方面
- 把异常和普通混淆在一起,不再编写任何错误代码,而是以简单地引发异常来代替所有的错误处理;
- 使用异常处理来代替流程控制
不要使用过于庞大的try块,会导致编程的复杂性
不要忽略捕获到的异常,捕获到啦异常之后,我们要及时去修复异常问题
总结
我们今天了解和学习啦异常机制的处理过程,以及处理异常的态度。
面对代码异常时,我们不必惊慌,冷静去分析异常信息,可以借助强大的网络和同事们
关于异常处理,我们会继续学习,本期就到这里,欢迎大佬们评论区沟通~