当前位置:

首页 > 编程开发 > Python自动化测试中的异常处理机制实现方法

Python自动化测试中的异常处理机制实现方法

一、前言主要讲解Python中异常介绍、捕获、处理相关知识点内容二、异常处理合集2.1异常处理讲解在正式介绍异常处理之前,需要先让大家了解一个概念:编程是不可能存在完美的,总有考虑不到的情况,因为人无完人,人类是有缺陷的,更何况编程是出自人类之手,在真实项目中不要相信任何人所说的:我的代码是完美的、这个绝对不会有问题类似的话,要知道在编程的世界里,没有绝对的可靠。大家也应该清楚了,只要是人所编写的程序就一定会存在问题,程序不按照正常流程执行,我们就称之为异常,异常处理顾名思义就是解决这种异常的情况,能够让

本文目录

      一、前言

      主要讲解Python中异常介绍、捕获、处理相关知识点内容

      二、异常处理合集

      2.1 异常处理讲解

      在正式介绍异常处理之前,需要先让大家了解一个概念:编程是不可能存在完美的,总有考虑不到的情况,因为人无完人,人类是有缺陷的,更何况编程是出自人类之手,在真实项目中不要相信任何人所说的:我的代码是完美的、这个绝对不会有问题类似的话,要知道在编程的世界里,没有绝对的可靠。

      大家也应该清楚了,只要是人所编写的程序就一定会存在问题,程序不按照正常流程执行,我们就称之为异常,异常处理顾名思义就是解决这种异常的情况,能够让程序正常按照逻辑和流程执行。

      2.2 异常捕获

      当一个程序执行报错时会终止运行,我们进行异常处理后再次运行就不会再出现报错,能够捕获到这个报错让程序顺利运行,这个异常处理的过程我们称之为异常捕获,让我们先看一个例子:

      print("------------------- 欢迎来到报名注册系统 -------------------")
       
      age = (input("请输入您的年龄:"))
      age = int(age)
      if age < 18:
          print("很遗憾,您暂时不满足注册条件")
      else:
          print("恭喜您符合注册条件")

      Python自动化测试中的异常处理机制实现方法

      如上代码所示,输入的数据为18时,能够正常的进行程序的逻辑计算,从而正常执行代码直至结束,但这样的代码真的没有问题吗?我们再看这个例子,当输入为abc英文字母时,出现了ValueError的错误,字面的意思是告诉我们出现了数值错误,无法将字符串转换为整型:

      print("------------------- 欢迎来到报名注册系统 -------------------")
       
      age = (input("请输入您的年龄:"))
      age = int(age)
      if age < 18:
          print("很遗憾,您暂时不满足注册条件")
      else:
          print("恭喜您符合注册条件")

      Python自动化测试中的异常处理机制实现方法

      如上图所示,出现了ValueError报错时,我们就可以通过异常捕获进行处理,处理后的代码为:

      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
      except:
          print("您的年龄输入非法,请重新运行本程序")
       
      if age < 18:
          print("很遗憾,您暂时不满足注册条件")
      else:
          print("恭喜您符合注册条件")

      Python自动化测试中的异常处理机制实现方法

      如上图所示,我们再次执行该程序并输入abc,程序仍然无法运行,已经不是刚刚的ValueError报错了,现在的报错是TypeError报错。

      2.3 异常捕获原理

      要解决上面的TypeError的报错,我们先来了解下异常捕获的原理,当正式开始一个try语句后,Python会在当前程序的上下文中作标记,当异常出现时返回标记处,try子句先执行,后续可能会发生的场景:

      场景一: 如果执行try语句时发生异常,Python跳回至try并执行第一个匹配该异常的except子句,异常处理完毕,继续执行代码。

      场景二: 如果执行try语句时发生异常,且没有匹配的except子句,异常将被递交到上层的try或是程序的最上层,到此结束程序,打印错误信息。

      场景三: 如果在try子句执行时没有发生异常,Python将继续执行代码语句。

      当我们了解了异常捕获的原理后在来看下之前的TypeError报错如何解决,字面意思类型错误,整型无法与字符串进行比较,但实际上在此之前我们就已经对变量age进行了处理,但因为捕获到了try的异常,执行了第一个匹配try的except子句,而子句又代替异常的语句,故此这里的类型转换就失效了,再次进行程序的运行就会出现类型错误,解决这个办法也很简单,只需要把判断语句也放在try中。

      当判断语句放到try中就稍微改变了一点点,如果没有捕获异常,程序照常执行,判断会生效,如果捕获到了异常,那么会直接跳转到except执行输出,提示您的年龄非法,就不会在有判断的逻辑,因此也不会在出现TypeError的错误了,顺带一提,这就是我们常见的开发Bug “买一送一” ,二次修改的代码如下:

      # 程序仍然有可优化的地方,仅展示try.. except语句的使用方式
      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
          if age < 18:
              print("很遗憾,您暂时不满足注册条件")
          else:
              print("恭喜您符合注册条件")
      except:
          print("您的年龄输入非法,请重新运行本程序")

      Python自动化测试中的异常处理机制实现方法

      Python自动化测试中的异常处理机制实现方法

      Python自动化测试中的异常处理机制实现方法

      2.4 特定异常捕获

      特定异常捕获顾名思义就是针对某一个出现的特定异常进行捕获,例如我们所遇到的ValueError,如果你捕获的是其他异常类型,那么在代码执行时碰到了ValueError仍然会出现报错:

      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
          if age < 18:
              print("很遗憾,您暂时不满足注册条件")
          else:
              print("恭喜您符合注册条件")
      # 这里进行捕获的异常类型是IndexError,非ValueError,最后的结果仍然会报错,因为没有成功捕获
      except IndexError:
          print("您的年龄输入非法,请重新运行本程序")

      Python自动化测试中的异常处理机制实现方法

      当捕获的类型错误时,仍然会弹出报错终止程序运行,好比一个人酒驾,那么就应该由交警处理而不是民政局的人处理,因为那不是它的职责,异常捕获还要讲究对口,如下代码所示,如果设置成ValueError就能够成功进行捕获,就好比交警处理了酒驾一样,完美解决:

      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
          if age < 18:
              print("很遗憾,您暂时不满足注册条件")
          else:
              print("恭喜您符合注册条件")
      except ValueError:
          print("您的年龄输入非法,请重新运行本程序")

      Python自动化测试中的异常处理机制实现方法

      2.5 异常捕获的处理

      刚刚我们举了一个例子,当异常捕获为IndexError时,运行程序后仍然会出现ValueError的错误,但我们不设置直接使用except时反而能直接捕获,那我们还要设置它做什么呢?想必有部分同学心中已经会产生这样的疑问了。

      except可以理解为万能警察,万能捕手,它可以捕获所有的异常类型(极少数无法直接捕获),而特定的异常捕获只能捕获特定出现的异常情况,我们之所以还要使用,是因为它是专门捕获一种类型的,好比一个人有皮肤问题,那么肯定是挂皮肤科门诊要比急诊科的医生要更加专业,正所谓术业有专攻。

      except因为是万能捕手,所以它在抓获异常后的处理方式是一样的,好比感冒和心脏病发作两种症状,都是同样的对待方式显然是不合理的,那么这个时候就会由特定的“医生” (特定捕获) 进行对应的处理方式。

      目前常见的一些报错有:ValueError、TypeError、IndexError等等,那么在整个自动化测试的过程中,势必会遇到很多其他的报错,当我们不清楚其他报错的情况下如何进行异常捕获呢?两种方式,第一种是错过一次就记得了,好比一开始进行编程的小伙伴们,谁也不知道会遇到ValueError一样,当碰到过一次后,下一次就会特别注意这个事情,提前做一个捕获,俗称踩坑。那另外一种方式就是在末尾继续添加except,万能捕手我们也留着,这样当特定捕获没有捕获到异常但程序出现了异常时,except就会进行捕获:

      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
          if age < 18:
              print("很遗憾,您暂时不满足注册条件")
          else:
              print("恭喜您符合注册条件")
      # 这里会报错ValueError,因为捕获的类型是IndexError,很明显无法进行ValueError异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
      except IndexError:
          print("您的年龄输入非法,请重新运行本程序")
      # 在下面可以在进行一个except的添加:
      except:
          print("万能捕手在此,束手就擒吧!")

      Python自动化测试中的异常处理机制实现方法

      2.6 except、Exception与BaseException

      except我们知道了是万能捕手,但其实它的身份是Exception,Python默认帮我们省略了,实际上它是这样的:

      except Exception:
          print("万能捕手在此,束手就擒吧!")

      except与except Exception完全等价,日常的编写时可加可不加,依据个人习惯和喜好决定即可。而BaseException是Exception的父类,作为子类的Exception无法截获父类BaseException类型的错误。

      BaseException: 包含所有built-in exceptions

      Exception: 不包含所有的built-in exceptions,只包含built-in, non-system-exiting exceptions,像SystemExit类型的exception就不包含在其中。Python所有的错误都是从BaseException类派生的

      2.7 finally用法

      finally的作用是无论except是否成功捕获到了对应的异常,均需要执行finally下的代码:

      """
      参考如下代码:打开了love.txt这个文件,进行了阅读,又想写入一点东西,但现在是只读的模式,无法进行内容写入,故此会报错io.UnsupportedOperation
      虽然没有写入成功,但是这个文件是成功读取了的,那么在文件的章节中提到过,如果打开了一个文件要记得关闭,否则其他人无法使用
      所以在finally这里我们就可以加上f.close(),代表着无论是否有捕捉到异常,最后我都要关闭这个文件,以确保其他人能够正常使用该文件
      """
       
      import io
       
      try:
          f = open("love.txt", encoding="utf-8", mode="r")
          f.read()
          f.write("随便写点~")
      except io.UnsupportedOperation:
          print("抓的就是你这个io.UnsupportedOperation报错")
      finally:
          # finally的作用是无论except是否成功捕获到了对应的异常,均需要执行finally下的代码
          f.close()

      2.8 异常信息的打印输出

      虽然我们能够捕获异常,但我们肯定要了解到底是什么异常,在捕获到一个异常时我们可以进行异常信息的打印:

      print("------------------- 欢迎来到报名注册系统 -------------------")
      age = (input("请输入您的年龄:"))
       
      try:
          age = int(age)
          if age < 18:
              print("很遗憾,您暂时不满足注册条件")
          else:
              print("恭喜您符合注册条件")
      # 这里会报错ValueError,捕获的是IndexError,很明显无法进行异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
      except IndexError as error:
          print("您的年龄输入非法,请重新运行本程序")
      # 在这里加一个as,后面接一个变量,然后进行变量打印即可,当出现对应的异常时就会打印对应异常的信息
      except Exception as error:
          print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")

      Python自动化测试中的异常处理机制实现方法

      刚刚有提到except与except Exception是等价的,但是如果想使用as必须要使用后者,这是语法规定:

      # 正确用法,在捕获类型后加as 变量
      except Exception as error:
          print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")
       
      # 错误的用法,不符合语法规则
      except as error:
          print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python
      相关文章 更多
      python删除一个列表里的重复元素的方法与代码示例
      python删除一个列表里的重复元素的方法与代码示例

      学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

      Python写接口的步骤及完整代码示例
      Python写接口的步骤及完整代码示例

      详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

      codex怎么读取word文档及docx文件操作教程
      codex怎么读取word文档及docx文件操作教程

      介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

      怎么在Python中调用C语言代码提升性能
      怎么在Python中调用C语言代码提升性能

      详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

      Python与C语言的性能差异及底层原理
      Python与C语言的性能差异及底层原理

      深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

      Python和C语言哪个更适合编程入门
      Python和C语言哪个更适合编程入门

      客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      langgraph python guide中文入门教程详解
      langgraph python guide中文入门教程详解

      本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

      Windows 安装 Python:从官方入口到虚拟环境的可复现实践
      Windows 安装 Python:从官方入口到虚拟环境的可复现实践

      面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。