我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
初识异常
- 初识异常
- 异常和错误的概念
- 错误
- 异常
- 常见的系统异常
- 常见异常
- 系统异常类继承树
- 如何解决异常
初识异常
异常和错误的概念
错误
- 概念
- 没法通过其他代码进行处理的问题,包括语法错误和逻辑错误
- 语法错误
- 比如:定义函数时,写成了
dfe xxx()
- 这种错误,可以直接通过IDE或者解释器给出的提示进行修改
- 比如:定义函数时,写成了
- 逻辑错误
- 语法层面没有问题,仅仅是自己设计的逻辑出现问题
- 比如:用户输入年龄,判定是否成年
if age < 18: print('已经成年了')
- 这种错误,IDE或者解释器无法检测出来,只有我们通过代码测试进行排除
异常
- 概念
- 多指程序在执行过程中,出现的位置错误,语法和逻辑都是正确的。可以通过其他代码进行处理修复
- 示例1
- 让用户输入年龄,判断是否成年
age = input('请输入年龄:') if int(age) > 18: print('已经成年了')
- 这段代码语法和逻辑都没有问题,但是如果用户输入一个abc,那么
int(age)
这里就会抛出异常 - 那么,我们可以在进行
int(age)
这个操作之前加一些代码进行判断,判断是否是我们想要的数据类型,再进行转换,就可以避免这个报错
- 让用户输入年龄,判断是否成年
- 示例2
- 设计一个计算器的除法
def devide(x, y): return x / y
- 这段代码语法和逻辑也没有问题,但是如果用户给参数y传入一个0,那么在计算
x / y
的时候也会抛出异常 - 当然,我们也可以在接收这个参数的时候加上一些代码进行判断,判断
y <> 0
的时候才执行除法操作
- 设计一个计算器的除法
- 示例3
- 列表或者字典,在使用过程中,出现索引或者key的错误
l = ['a', 'b'] print(l[3])
- 列表或者字典,在使用过程中,出现索引或者key的错误
- 这一系列的示例中,出现的异常,我们都可以通过增加一些其他代码进行处理修复
常见的系统异常
常见异常
- 除零异常
2 / 0 # ZeroDivisionError —— ArithmeticError —— Exception —— BaseException
- 名称异常
print(name) # NameError —— Exception —— BaseException
- 类型异常
'1' + 2 # TypeError —— Exception —— BaseException
- 索引异常
l = ['a', 'b'] l[3] # IndexError —— LookupError —— Exception —— BaseException
- 键异常
dic = {'a':1, 'b':2} dic['c'] # KeyError —— LookupError —— Exception —— BaseException
- 值异常
int('abc') # ValueError —— Exception —— BaseException
- 属性异常
name = '失心疯' name.xx # AttributeError —— Exception —— BaseException
- 迭代器异常(停止异常)
ite = iter([1, 2]) next(ite) next(ite) next(ite) # StopIteration —— Exception —— BaseException
- 文件未找到异常
with open('./异常处理.txt', mode='r', encoding='utf-8') as f: f.read() # FileNotFoundError —— (OSError)WindowsError —— Exception —— BaseException
系统异常类继承树
- 继承树
# BaseException # 所有内建异常的基类 # SystemExit # 由sys.exit()函数引发,当它不处理时,Python解释器退出 # KeyboardInterrupt # 当用户点击中断键时引发 # GeneratorExit # 当调用一种generator的close()方法时引发 # Exception # 所有内置的、非系统退出异常都是从该类派生的(所有自定义异常都应该继承自该类) # ArithmeticError # ZeroDivisionError # NameError # TypeError # LookupError # IndexError # KeyError # ValueError # AttributeError # StopIteration # WindowsError # FileNotFoundError
如何解决异常
- 系统一开始已经内置了一些特定的应用场景;当我们写代码的过程当中,一旦触发了这个场景,系统内部就会自动的向外界抛出这个问题,也就是我们所谓的异常
- 如果我们不处理这些异常,程序就会被终止执行,软件崩溃
- 解决方案
- 1、预防
- 措施:
- 添加容错代码
- 弊端:
- 1、有些异常无法预防,如:NameError
- 2、容错代码不属于业务逻辑,容错代码过多会造成代码混乱,主业务不清晰
- 措施:
- 2、解决
- 措施:
- 异常捕获处理
- 措施: