python异常处理try的实例小结
作者:z天赐 发布时间:2022-01-25 06:06:51
异常处理
简介
在我们写程序代码的时候,往往会因一个小问题让我们整个程序直接挂掉。
异常处理对我们测试有什么好处,相信做过自动化的同学都知道我们的用例都是一条一条的去执行比如我们程序用例几百条,有一条用例因数据原因导致了程序异常,那么剩下的就会全体停止工作,遇到这样的情况我们应该将这个数据导致的问题抛出来,处理这个异常就可以了。
我们可以使用 tryexcept 的方式来处理异常。
结构
将有可能发生报错的语句放到try:里面,然后使用except来处理异常,每一个try 必须至少有1个except。
如果可能发生报错的语句我们能知道要报哪些异常,except 后需要跟上异常名称
也可以使用万能异常Exception,他可以捕获任意异常
python所有的标准异常类:请看文章末尾处
实例1:处理指定错误异常类型
如果我们知道会报那些错误,那么就可以直接来捕捉处理就好了,但是如果捕捉异常名称不正确,则也会程序报错。
首先我们打印一个未声明/初始化对象 (没有属性)的错误,然后再后面再打印一个正常能被执行的数据
print(aa)
print('bb')
打印结果
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py", line 6, in <module>
print(a)
NameError: name 'a' is not defined
显然print("bb")没有被执行,我们此时对我们可能或者已知报错的部分增加try:并且用except 指定NameError as 到f变量,并且打印出这个错误
try:
print(aa)
except NameError as f:
print(f)
print('bb')
打印结果
name 'aa' is not defined
bb
可以看出,程序将报错信息打印了出来,然后执行了print("bb")
假如我是打开一个错误的文件呢?我又不知道打开文件错误的名称,这时候我又怎么处理呢?
try:
open('ztc.txt','r')
except NameError as f:
print(f)
print('bb')
打印结果:
实际是输出错误文件,我用Nameerror是不能正确找到该异常名称的
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py", line 2, in <module>
open('ztc.txt','r')
FileNotFoundError: [Errno 2] No such file or directory: 'ztc.txt'
遇到这样的情况请看实例2
实例2 :万能的异常处理
实例1中我们说了,在我们能确定会报什么类型的错误的时候,我们可以指定这个错误类型来处理他,当然在很多时候,我们会遇到很多的未知异常,不可能将所有异常都预知到,那么我们可以直接用万能异常Exception
try:
open('ztc.txt','r')
except Exception as f:
print(f)
print('bb')
打印结果:
无论我们try中是任何错误类型的异常,exception都可以来处理他
[Errno 2] No such file or directory: 'ztc.txt'
bb
实例3:try...finally...
try...finally...的意思是,我们程序是否遇到错误,这些代码必须执行
都有哪些场景可以用到?
比如我们链接数据库,要操作数据库,程序报错了或者没报错, 都必须要执行关闭数据库
比如我们打开一个excel或者txt文档,要写入数据,无论报错或者没报错,都必须关闭这个文档
先看一个执行正常的情况
try:
f = open('ztc.json','r')
finally:
f.close()
print('已经关闭')
打印结果
已经关闭
再看看如果打开文件后,还没等文件关闭呢,就报错了
try:
f = open('ztc.json','r')
print(aaa)
finally:
f.close()
print('已经关闭')
打印结果
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py", line 3, in <module>
print(aaa)
NameError: name 'aaa' is not defined
已经关闭
看上面代码,显然程序打印print(aaa)的时候报错了,但是依然将打开的文件给关闭了
附录:
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 解释器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
来源:https://www.cnblogs.com/ztcbug/p/15430560.html


猜你喜欢
- 前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样
- 请求:HTTP 请求报文由请求行、请求头部、空行、请求包体4个部分组成,如下图所示:请求行:请求行由方法字段、URL 字段 和HTTP 协议
- 一、石头剪刀布游戏目标:创建一个命令行游戏,游戏者可以在石头、剪刀和布之间进行选择,与计算机PK。如果游戏者赢了,得分就会添加,直到结束游戏
- 实例如下:<?php/*分治法——直接选择比如说a b c首先将a之后的字符依次与a进行交换1 b,a,c2 c,b,a注意这里少了一
- 如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子:$unsafe_variable = $_
- MySQL 修改密码实例详解许久不用MySQL了,今天打开HediSQL连接mysql时发现root密码忘记了,修改密码操作捣鼓了一阵子,记
- hello,我是小小炽,这是我写的第一篇博客,写博客一直都想在写,但是苦于能力尚浅,在各位大牛面前那既然是关公面前耍大刀了,但是其实想来每一
- 小编曾经有过这样的经历,就是在安装使用django框架时候,遇到了部分模块不能够使用,检查了很久,才发现是因为版本问题,需要重新编译安装一个
- 在项目文件中新建文件.env .env.pro 两个文件其中.env 是默认设置 .env.pro 为正式环境设置1、设置.env中的内容信
- 在看子串匹配问题的时候,书上的关于KMP的算法的介绍总是理解不了。看了一遍代码总是很快的忘掉,后来决定好好分解一下KMP算法,算是给自己加深
- 1、引言小 * 丝:鱼哥,这个周末过得咋样小鱼:酸爽~ ~小 * 丝:额~~ 我能想到的,是这样吗?小鱼:有多远你走多远。小 * 丝:唉,鱼哥,你别说,
- <%'============================================================
- 本文主要是写了一个将指定文件夹下的指定文件类型移动到指定位置,具体内容如下# coding:utf-8import osimport shu
- 使用python里的indexnums = [1, 2, 3, 4, 5, 6, 1, 9]print nums.index(max(num
- 本次内容主要是上周内容的延续,主要画出kitti车的行驶的轨迹同样的,我们先来看看最终实现的效果:视频接下来就进入一步步的编码环节。。。&n
- 代码如下:<%@ Language=VBScript %> <% Dim 
- 常见的反爬机制及处理方式1、Headers反爬虫 :Cookie、Referer、User-Agent解决方案: 通过F12获取header
- 在做前端界面开发的时候,遇到需要改变颜色的需求,就需要使用颜色选择器。针对这个问题,第一想法,自然是H5提供了input color,可以实
- 上面两个简单的Sql,我们从表面理解,查询的最终结果应该是一样的,但实际结果却和我们想象的不一样第一条sql查询的结果有一条数据第二条sql
- 我就废话不多说了,大家还是直接看代码吧~import tensorflow as tffrom sklearn.metrics import