在python中、如果异常并未被处理或捕捉_脚本语言系列之Python | Python异常处理

本文详细介绍了Python中的异常处理机制,包括基础的异常类、try/except/finally语句的使用以及如何通过raise语句主动抛出异常。通过实例展示了在文件操作中如何捕获和处理IOError,以及如何自定义异常类来扩展异常处理。
摘要由CSDN通过智能技术生成

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', '账户密码错误')

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值