python except用法和作用_脚本语言系列之Python | Python异常处理

2023-05-16

Python是做自动化工作首选的一门语言,与更复杂的语言相比,Python 非常便于快速学习、语法很少,具有良好的 可读性,即使测试工程师们没有丰富的编码经验,也能快速学会;Python 的极简风格对于测试自动化具有诸多优势,测试步骤在本质上是呈线性的、一 次执行一个,按顺序执行,配合丰富的插件,非常适合测试脚本的开发。

本文主要介绍python中异常处理操作,包括异常及异常处理的概念、try/except/finally的使用及raise的使用。

一、python异常处理简介

1、python异常

python用异常对象(exception object)来表示异常情况,遇到错误后,会引发异常,如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

  • 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
  • 一般情况下,在Python无法正常处理程序时就会发生一个异常。
  • 异常是Python对象,表示一个错误。
  • 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

常见异常:

BaseException   所有异常的基类
KeyboardInterrupt   用户中断执行(通常是输入^C)
Exception   常规错误的基类
StandardError   所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError  浮点计算错误
OverflowError   数值运算超出最大限制
ZeroDivisionError   除(或取模)零 (所有数据类型)
AssertionError  断言语句失败
BaseException 是 Exception 的父类,作为子类的Exception无法截获父类BaseException类型的错误。

2、异常处理

  • 捕捉异常可以使用try/except语句。
  • try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
  • 如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法结构如下:

try:
<语句>        #运行别的代码
except <名字>:
<语句>        #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>        #如果引发了'name'异常,获得附加的数据
else:
<语句>        #如果没有异常发生

异常处理语法的工作原理是:

  • 当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

二、异常处理的使用

1、try-except使用

案例1:主要处理被除数为0及列表索引越界异常的

try:
    #此处是抛异常的
    # a = 1/0
    #此处是不抛异常的
    # a = 1 / 2
    #定义一个三个元素的列表
    ll = [1,2,3]
    print(ll[1])
    print("我在异常之后")
#使用被除数为0的异常对象是抓不到索引越界异常的
# except ZeroDivisionError as z:
#可以使用Exception异常类的根类去抓
# except Exception as e:
#     print("抓到了异常:",e)


#还有一种用法就是写多个except去抓
except ZeroDivisionError as z:
    print("抓到了异常:",z)
except IndexError as i:
    print("抓到了异常:",i)
finally:
    print("不管你走的是try还是except语句,最后都要运行finally语句")

print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")

案例2:文件写数据时候的使用

#没有提前准备testfile.log文件
try:
    fh = open(r"e:testfile.log", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()

=======输出结果==========
e盘根目录下自动创建文件testfile.log,并写入文字"这是一个测试文件,用于测试异常!!"
控制台输出:"内容写入文件成功"

案例3:文件读数据时候的使用

#没有提前准备testfile2.log文件
try:
    fh = open(r"e:testfile2.log", "r")
    print(fh.read())
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容读取文件成功")
    fh.close()

========输出结果==========
Error: 没有找到文件或读取文件失败

2、raise主动抛出异常

我们可以使用raise语句自己触发异常,一个异常可以是一个字符串,类或对象。

Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数,语法如下:

raise [Exception [, args [, traceback]]]
  • 语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
  • 最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

案例1:在指定位置直接抛出Exception异常

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

functionName(0)

=========输出结果==============
Exception: ('Invalid level!', 0)

3、用户自定义异常

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。

案例:自己定义异常类,通过try/except抓取该类进行处理。

class myException(Exception):
    def __init__(self,errorcode,info):
        self.errorcode = errorcode
        self.info = info


try:
    # raise myException('1001',"账户密码错误")
    raise IndexError('1001',"索引越界异常")
except Exception as m:
    print(m)

========输出结果===============
('1001', '账户密码错误')

欢迎关注作者,如果觉得写的还不错,就给点个赞同、喜欢、收藏(后续持续更新)。

【全文手打 如需转载 请标注此出处】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python except用法和作用_脚本语言系列之Python | Python异常处理 的相关文章

随机推荐