Python全系列 教程
3567个小节阅读:5930.8k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是:Exception
,意思是例外。遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的处理,安全的退出,而不至于程序崩溃呢?我们本章就要讲解这些问题。
工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这个文件可能不存在或者文件格式不对;程序在运行着,但是内存或硬盘可能满了等等。
如果我们要拷贝一个文件,在没有异常机制的情况下,我们需要考虑各种异常情况,伪代码如下:
这种方式,有两个坏处:
如上情况,如果是用Python的异常机制来处理,对比如下:
异常机制本质:
当程序出现异常,程序安全的退出、处理完后继续执行的机制
python中,引进了很多用来描述和处理异常的类,称为异常类。异常类定义中包含了该类异常的信息和对异常进行处理的方法。下面较为完整的展示了python中内建异常类的继承层次:
我们处理一下,遇到的第一个异常:
#测试简单的0不能做除数异常
a = 3/0
xTraceback (most recent call last):
File "...mypro_exception/my01.py", line 1, in <module>
a = 3/0
ZeroDivisionError: division by zero
Process finished with exit code 1
python中一切都是对象,异常也采用对象的方式来处理。处理过程:
- 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。
- 捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常
解决每一个遇到的异常,建议大家遵循如下三点:
正常情况,自己遵循如上步骤解决30个以上的错误,就能积累初步的调试经验,以后遇到的大部分错误都能独立完成。
当发生异常时,解释器会报相关的错误信息,并会在控制台打印出相关错误信息。我们只需按照从上到下的顺序即可追溯(Trackback)错误发生的过程,最终定位引起错误的那一行代码。
【示例】追溯异常发生的过程
xxxxxxxxxx
def a():
print("run in a() start! ")
num = 1/0
print("run in a() end! ")
def b():
print("run in b() start!")
a()
print("run in b() end! ")
def c():
print("run in c() start!")
b()
print("run in c() end! ")
print("step1")
c()
print("step2")
控制台打印结果:
xxxxxxxxxx
step1
run in c() start!
run in b() start!
run in a() start!
Traceback (most recent call last):
File "...mypro_exception/my01.py", line 17, in <module>
c()
File "...mypro_exception/my01.py", line 12, in c
b()
File "...mypro_exception/my01.py", line 7, in b
a()
File "...mypro_exception/my01.py", line 3, in a
num = 1/0
ZeroDivisionError: division by zero
Process finished with exit code 1
实时效果反馈
1. 如下关于异常机制本质,说法正确的是:
A 当程序出现异常,程序彻底退出
B 当程序出现异常,程序出现不可知的结果
C 当程序出现异常,程序安全的退出、处理完后继续执行的机制
D 当程序出现异常,程序随机终止到某行代码
2. 碰到异常,错误的态度是:
A 不慌张,细看信息,定位错误。
B 百度并查看十个相关帖子。
C 百度无法解决,问老师
D 慌张,我能力不行,我错了。马上让老师帮忙调错
答案
1=>C 2=>D