异常处理 *****
三层结构 ***
什么是异常:
异常是一种信号,是一种不同于常规情况的信号 如果没有正确处理
最后的结果报错,同时中断程序的运行
目的:
学习异常待处理的目的是为了提高程序的健壮性
异常的结果就是报错
异常的分类:
1.语法检测异常 最低级的错误 不需要学处理 语法基础掌握牢固即可
2.运行时异常
已经通过了语法检测,开始解释执行代码了,但是逻辑上有问题
强调:***
解释器在执行程序时 首先要做的就是语法检测 如果发现问题 则一行代码也不会执行
异常的组成
追踪信息:用于定位错误发生的位置
发生错误的文件路径以及行号
具体发生错误的代码
异常的类型:具体的原因
处理异常的基本语法
try
#这里放的是有可能出现问题的代码
#try 的好处是即使发生了异常 也不会导致程序中断
except
#放的是具体处理这个异常的代码
多个except 可以针对不同的异常类型 具体来处理
一旦try中有代码发生了异常 剩余代码都不执行
意味着 不管有多少except都只执行一个
万能异常 Exception(不推荐使用)
BaseException 也是万能异常
如果后期一定要使用万能异常 一定要打印异常信息
否则 程序不会出现任何异常 但是也不会达到你的预期效果
except Exception as e
print(e)
try:
except TypeERRor:
finally: #无论是否发生异常 都会执行它
用于清理除了解释器之外的资源
需要掌握的语法:
1.try except except.....
2. try except finally
断言
一句非常肯定的话
assert 判断 如果True 继续执行
否则不会执行下面代码 并且抛出异常
assert 仅仅帮你简化了if代码
使用方法
assert 条件表达式
主动抛出异常
语法: raise可以是一个异常类 也可以是某个异常类的对象
场景:作为功能的提供者 要提供一个功能给外界使用
当使用者没有按照正常要求来使用功能时 导致功能无法正常运行时 就应该抛出异常来告诉使用者
功能提供方 抛出异常
功能使用方 处理异常
li=[]
if li:
print('处理这个列表')
else:
raise ValueError('你的值有问题')
为什么自定义异常类
当内置异常类型 无法准确描述错误原因时 就需要自定义
让你的类 继承任何的异常类最好是BaseException
# import os
# class MyRead:
# def __init__(self,path):
# if not os.path.exists(path):
# raise FileExistsError('你的路径不正确 小码农')
# self.file=open(path,'rt',encoding='utf-8')
#
# def read(self):
# return self.file.read()
#
#
# r=MyRead('xxxxxx')
# print(r.read)
自定义异常
1.在明确知道错误原因时,尽可能不使用异常处理,直接使用判断
2.避免使用万能异常,会使得你的程序即不出错,也不不正常执行,如果非要用,一定记得打印异常信息
3.常用的语法是第一种
# class MyException(BaseException):
# def __init__(self,msg,abc):
# super().__init__(msg)
# self.abc=abc
#
# pass
#
# class MyException2(BaseException):
# # pass
# #
# #
# # def func():
# # pwd1='123'
# # pwd2='1234'
# # if pwd1==pwd2:
# # print('注册成功!')
# # else:
# # raise MyException('两次密码不相同','测试参数')
# # # func()
# # try:
# # func()
# # except BaseException as e:
# # print(e.abc)
View Code
软件开发的
1.需求分析
2.项目设计
三层机构就是用于项目设计的
简单的说 就是指导你 什么样的代码要放在什么样的文件里
前提:需要明确 所有应用程序 本质上都是与用户发生交互 从而操作数据
三层结构把程序分为
1.用户界面层
负责接受数据和展示数据
2.业务逻辑层(接口层)
负责一系列的逻辑判断
将数据组装成一定格式
3.数据处理层
负责将数据存储到指定位置
与从指定位置读取数据 交给业务逻辑层