python异常:常见异常、处理、断言、自定义异常
本文目录:
一、异常是什么
什么是异常?
- 异常是错误发生前的一种信号
- 如果没有人来处理这个信号 程序就会中断执行并抛出错误信息
异常的分类:
1.语法检查异常 这种异常是最低级异常 绝对不应该犯
- 也非常好避免
- 如果是编译器 会自动提示
- 如果是文本编辑器 在你运行代码前 解释器会检查语法
2.运行时异常(逻辑异常)
- 这种异常只有在代码被执行时才能发现
- 我们要处理的重点就是运行时异常
特点:在没有运行代码前 是无法发现的- 如果运行时异常已经发生并且没有正确处理他 就抛出错误信息
- 并且中断程序的执行 这是要我们学习异常解决的问题
异常的组成
- 1.追踪信息 (具体发生异常的位置 以及函数的调用顺序)
- 2.异常的类型 (错误的类型)
- 3.异常的消息 (详细的错误信息)
- """
- 我们之所以学习异常处理
- 为的是让我们的程序更加稳定 (健壮性) 不容易崩溃
- """
- name =
- def func():
- import xxaaa
- def func1():
- func()
- func1()
二、常见异常
- """
- 常见的发生原因:
- NameError 找不到这个名字 要么变量 要么函数
- ValueError 在调用一个函数时给的的值不正确
- TypeError 类型错误 例如字符串与数字加减乘除 调用一个不能被调用的类型
- ZeroDivisionError 除数不能为0
- KeyError 没有这个key
- IndexError 索引不存在
- StopIteration 没有更多的值可以迭代
- FileNotFoundError 文件不存在
- io.UnsupportedOperation 文件的操作不支持
- AttributeError 没有这个属性
- KeyboardInterrupt 程序被强行终止 ctrl+c
- """
- # print(helloword)
- # age = int(input("请输入年龄:"))
- # li = []
- # li()
- # "abc" + 123
- # 5 / 0
- # with open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt") as f:
- # pass
- # print(f)
- # f.read()
- # dic = {"age":20}
- # dic["sex"]
- # li = [1,2,3]
- # print(li[-100])
- # def my_iter():
- # yield "a"
- # yield "b"
- # i = my_iter()
- # print(next(i))
- # print(next(i))
- # print(next(i))
- # f = open("test","rt")
- # f.write("123")
- # li = []
- # li.abc
- # import time
- while True:
- pass
三、异常处理
- """
- 要处理异常
- 要学的就是一个新的语法
- 今后使用最多的写法:
- try:
- 这里放可能出现异常的代码
- except: 异常的类型:
- 当异常发生并且异常类型匹配时
- 执行except中的代码
- 注意:一旦try中有代码抛出了异常 后面的代码全都不执行
- 练习: 捕获某种类型的异常 捕获任意类异常 感受一下执行顺序
- """
- #基本语法:
- # print("staring.....")
- # try:
- # name
- # except NameError:
- # print("名字找不到!")
- # print("end.......")
- # 多种异常类型处理
- # print("staring.....")
- # try:
- # name
- # [][-1]
- # pass
- # except NameError:
- # print("名字找不到!")
- # except IndexError:
- # print("索引超出范围")
- # print("end.......")
- # 当代码可能出现多种异常时的写法
- # print("staring.....")
- # try:
- # # name
- # # [][-1]
- # 1/0
- # pass
- # except NameError:
- # print("名字找不到!")
- # except IndexError:
- # print("索引超出范围")
- # except ZeroDivisionError:
- # print("除数不能为0")
- # print("end.......")
- # 当代码可能出现多种异常时的写法2
- # print("staring.....")
- # try:
- # {}["aaa"]
- # # name
- # # [][-1]
- # 1/0
- # except (NameError,IndexError,ZeroDivisionError):
- # print("可能名字找不到! 可能所以超出范围 可能除数为0")
- # print("end.......")
- # 上面两种写法 都可以处理多种异常 但是 异常类型太多了 不可能全写完
- # 万能异常类型 Exception 或BaseException 基于OOP的继承和多态
- print("staring.....")
- try:
- # {}["aaa"]
- # name
- # [][-1]
- 1/0
- except Exception:
- print("可能名字找不到! 可能所以超出范围 可能除数为0")
- print("end.......")
四、不太常用的语法
- """
- 不太常用的
- 语法1
- try:
- except:
- else: try中没有发生异常时执行
- 语法2
- try :
- except :
- finally : 无论是否发生异常 都会执行finally 可以用来回收系统资源!
- """
- # print("start...")
- # try:
- # # 1/0
- # [][1]
- # pass
- # except ZeroDivisionError:
- # print("除数异常")
- # except NameError:
- # print("名字异常")
- # else:
- # print("else会在 try中没有异常时执行")
- # print("end...")
- # finally
- # print("start...")
- # try:
- # # 1/0
- # # [][1]
- # pass
- # except ZeroDivisionError:
- # print("除数异常")
- # except IndexError:
- # print("索引异常")
- # else:
- # print("else会在 try中没有异常时执行")
- # finally:
- # print("finally 无论异常是否发生 都会执行!")
- # print("end...")
- # 使用finally来回收资源
- try:
- f = open(r"D:\上海python全栈4期\day31\异常处理\1今日内容","rt",encoding="utf-8")
- f.read()
- # f.write("123")
- except Exception:
- print("发生异常了")
- finally:
- print("关闭文件!")
- f.close()
- print(f.closed)
五、主动抛出异常
- """
- 当程序中有一些限制 然而用户没有遵守 我们可以主动抛出异常
- 语法:
- raise 异常类型(异常的详细信息)
- 类型必须是BaseException的子类
- """
- # raise NameError("这就是名字不存在异常!")
- age = input("请输入整型的年龄:")
- if not age.isdigit():
- raise TypeError("你输入的不是整型!")
- age = int(age)
- print("十年后你%s岁" % (age + 10))
六、断言
- """
- 断言 可以理解断定 就是很清楚 很明确
- 什么时候需要断定?
- 下面的代码必须依赖上面代码的正确数据
- 语法: assert 结果为Bool的表达式
- 如果值为True 则继续往下执行
- 为False 抛出一个 AssertionError 表示断言失败
- 没有assert 也可以使用if来玩 assert 仅仅是简化了代码
- """
- # 第一部分代码 负责产生一个列表
- li = []
- # li.append(1)
- # li.append(2)
- # 这里一定要确保数据是有效的
- # if len(li) < 1:
- # raise ValueError("列表中没有数据!")
- assert len(li) > 0
- # 需要使用列表中的数据来完成任务 如果没有数据无法完成
- print(li[0])
- print(li[0])
- print(li[0])
- print(li[0])
七、使用场景
- try:
- print("业务逻辑分层复杂 写了好几百行!")
- except Exception:
- print("可能是文件不存在!")
- try:
- print("业务逻辑分层复杂 写了好几百行!")
- except Exception:
- print("类型不匹配!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- print("业务逻辑分层复杂 写了好几百行!")
- except Exception:
- print("有点问题!")
- # 不应该滥用try except
- # 什么时候用? 如果你知道为什么出错 应该把代码修改正确 而不是加上try except
- # 你不清楚为什么会发生异常! 这时候用try
- try:
- f = open("xxxx","rt")
- f.read()
- except Exception:
- print("文件不存在!")
八、自定义异常
- """
- 当系统提供的这些异常类型 和你要描述的错误不匹配时 就需要自定义异常类型
- 写法:
- class 自定义异常类型名称(BaseException):
- 总结一下:之所以自定义异常类型 是为了更具体描述你的错误 让使用者一眼就看出了
- 关键点:1.如何自定义异常类型
- 2.在except中 使用as 来获取异常对象
- """
- # 你随便输入一句话 看我喜不喜欢 不喜欢我就抛出异常
- # 自定义异常类
- class UnlikeError(BaseException):
- def __init__(self,msg,text):
- self.msg = msg
- self.text = text
- # 函数中可能抛出异常
- def hello():
- text = input("输入一段话:")
- if text == "你真帅":
- print("你说得对!")
- else:
- raise UnlikeError("你再看看...","另一个参数")
- # 捕获异常
- try:
- hello()
- # 获取异常对象
- except UnlikeError as e:
- print(e.text)
python异常:常见异常、处理、断言、自定义异常的更多相关文章
- Python语言常见异常错误类型
在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类).能很好的理解这些错误提示类名所代表的意思 ...
- Python开发 常见异常和解决办法
1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...
- Python异常类型及处理、自定义异常类型、断言
异常的概念.识别报错信息 异常处理 断言的基本使用 异常类型(异常就是报错) 常见异常 NameError:名称错误 SyntaxError:语法错误 TypeError:类型错误 错误回溯 查看报错 ...
- python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3
异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...
- Python常见异常及常用单词翻译
Python常见异常及常用单词意思 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportE ...
- Python中常见的异常总结
Python中常见的异常总结 当Python检测到一个错误时,解释器就会指出当前流已经无法继续执行下去,这时候就出现了异常. 一.异常错误 a.语法错误 错误一: if ...
- python中常见的一些错误异常类型
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的 ...
- python错误和异常
一:语法错误syntax errors 熟悉语法! 二:异常 ①打印错误信息时,异常的类型作为异常的内置名显示,并以调用栈的形式显示具体信息 ②常见的异常: ...
- Python错误和异常 学习笔记
错误和异常概念 错误: 1.语法错误:代码不符合解释器或者编译器语法 2.逻辑错误:不完整或者不合法输入或者计算出现问题 异常:执行过程中出现万体导致程序无法执行 1.程序遇到 ...
随机推荐
- flask(2.0)
目录 一. Flask基础(一) 1.Flask启动 2.路由 3.Response 4.Request 5.Jinja2 6.session 二.Flask基础(二) 1.路由配置 (1)metho ...
- clrscr()及gotoxy()函数
1.clrscr() 作用:清屏,跟 cmd 中的清屏作用一样 注意:只有在 Trubo C 中能用,需要包含头文件:conio.h 替代:system("cls"); 需要头文件 ...
- 云计算openstack核心组件--glance-镜像服务(6)
glance做什么 OpenStack 由 Glance 提供 Image 服务 获取镜像位置 https://docs.openstack.org/image-guide/obtain-images ...
- 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题
参考:首先,声明一点,凡是使用malloc之类命令动态申请的内存,必须进行释放操作,否则就会发生内存泄漏问题. DLL中申请的内存释放,如果没有做过,很可能会认为是直接在调用程序中释放就可以了,其实不 ...
- python类学习
创建关于汽车的类 class Cars(): def __init__(self, brand, country): self.brand = brand self.country = country ...
- 20.采集项目流程篇之清洗数据绑定到hive表中
先启动hive 在mydb2这个数据库中创建表: create external table mydb2.access(ip string,day string,url string,upflow s ...
- PAT 甲级真题题解(121-155)
1121 Damn Single 模拟 // 1121 Damn Single #include <map> #include <vector> #include <cs ...
- The import javax.websocket cannot be resolved的解决问题
在eclipse中导入项目的时候出现了这个问题,废了我半天劲,才搞明白,把问题记录下来,方便大家以后遇到这问题好处理.提供参考. 出现的问题截图: 因为我用的是tomcat8, 大体步骤:项目上点右键 ...
- POJ - 3249 Test for Job (在DAG图利用拓扑排序中求最长路)
(点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权 ...
- linux常用国内的免费源及其各别的配置方法.阿里源,epel源,搜狐网易等等..
国内的一些开源的平台收集的源,确实给我们提供了很多便利,所以我就稍微收集整理了一些常用的源和网址,我也不确定能用到什么时候!欢迎评论区留言! 搜狐开源镜像站 http://mirrors.sohu.c ...