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)发生异常来通知退出
SystemExitPython 解释器请求退出
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尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告

来源:https://www.cnblogs.com/ztcbug/p/15430560.html

标签:python,异常处理,try
0
投稿

猜你喜欢

  • 用JMail、CDONTS发送邮件asp源码

    2007-09-24 15:58:00
  • python中的Pytorch建模流程汇总

    2022-04-26 19:02:14
  • Python如何用NumPy读取和保存点云数据

    2022-05-26 17:41:19
  • Python清空文件并替换内容的实例

    2023-03-22 04:09:43
  • asp如何在线查询本地机的文件?

    2010-06-22 21:19:00
  • Javascript 动画初探(原理)

    2009-02-06 15:53:00
  • Pygame实战练习之飞机大战游戏

    2021-01-13 13:11:25
  • python 自动去除空行的实例

    2021-04-12 08:46:04
  • 页面无刷新调用数据(IFRAME+js)

    2009-06-01 11:29:00
  • Python中Pyenv virtualenv插件的使用

    2021-10-25 08:07:19
  • 如何使用pyinstaller打包多个和单个python文件详解

    2023-03-30 10:48:26
  • Python装饰器的练习题

    2023-12-07 13:11:48
  • PHP set_time_limit(0)长连接的实现分析

    2023-11-06 11:46:20
  • 47个惊人的CSS3动画演示

    2010-02-07 12:32:00
  • 避免重复写代码的小函数

    2008-09-21 13:41:00
  • 哪种Python框架适合你?简单介绍几种主流Python框架

    2023-04-27 03:21:52
  • 使用CSS选择器创建个性化链接样式

    2009-06-02 13:07:00
  • python使用scapy模块实现ARP扫描的过程

    2023-07-16 11:55:26
  • JSP实现客户信息管理系统

    2023-06-30 05:32:36
  • Tensorflow中使用cpu和gpu有什么区别

    2021-10-15 15:48:45
  • asp之家 网络编程 m.aspxhome.com