当前位置: 首页 > news >正文

Python教程(十一):单元测试与异常捕获

目录

    • 专栏列表
    • 前言
    • 一、Python中的测试
      • 1.1 单元测试
        • 1.1.1 定义测试类
        • 1.2.1 安装 `pytest`
        • 1.2.2 编写测试
        • 1.2.3 运行测试
    • 二、Python中的异常捕获
      • 2.1 常规代码
      • 2.2 异常基础
    • 三、抛出异常(异常传播)
    • 四、 自定义异常

专栏列表

  • Python教程(一):环境搭建及PyCharm安装
  • Python 教程(二):语法与数据结构
  • Python 教程(三):字符串特性大全
  • Python 教程(四):Python运算符合集
  • Python 教程(五):理解条件语句和循环结构
  • Python 教程(六):函数式编程
  • Python 教程(七):match…case 模式匹配
  • Python 教程(八):高级特性【高逼格代码】
  • Python 教程(九):内置模块与第三方模块
  • Python教程(十):面向对象编程(OOP)

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


前言

在软件开发过程中,测试和异常捕获是两个非常重要的环节。测试可以帮助我们确保代码的正确性,而异常捕获则可以提高代码的健壮性和容错性。本篇文章将详细介绍Python中的测试方法和异常捕获机制,并通过实例帮助你更好地理解和应用这些知识。

一、Python中的测试

1.1 单元测试

单元测试是对软件中的最小可测试单元进行验证的测试。Python中有一个内置模块 unittest,用于编写和运行单元测试。

1.1.1 定义测试类

首先,我们需要定义一个测试类,并继承 unittest.TestCase

复制并运行下列代码,unittest 会自动查找继承了 unittest.TestCase 的类,并执行其中的测试方法。

import unittestdef hello(w):return f'Hello {w}!'class TestMathOperations(unittest.TestCase):def test_hello(self):self.assertEqual(hello('ziyu'), 'Hello ziyu!')def test_subtraction(self):self.assertEqual(5 - 3, 1)if __name__ == '__main__':unittest.main()

在这里插入图片描述

1.2.1 安装 pytest
pip install pytest

在这里插入图片描述

1.2.2 编写测试

创建 pytest-demo.py 文件 ,编写测试不需要继承任何类,只需定义以 test_ 开头的函数。

def hello(w):return f'Hello {w}!'def test_hello():assert hello('ziyu') == 'Hello ziyu!'def test_subtraction():assert 5 - 3 == 1
1.2.3 运行测试

在终端运行 pytest 命令,pytest 会自动查找并运行所有以 test_ 开头的测试函数。

pytest .\test-demo\pytest-demo.py

在这里插入图片描述

二、Python中的异常捕获

何为异常:完全无法在程序运行过程中预测的
异常会让我们程序中断,不能继续运行,这就是我们通常所说的bug,bug是必须修复的。

2.1 常规代码

程序被中断,后面的代码不会被执行

print('程序开始...')
r = 10 / 0
print('打印结果:', r)
print('后续逻辑。。。。')

在这里插入图片描述

2.2 异常基础

在Python中,异常是指在程序运行过程中发生的错误。我们可以使用 tryexceptelsefinally 关键字来捕获和处理异常。

try:# 可能发生异常的代码x = 1 / 0
except ZeroDivisionError as e:# 处理异常print(f"出错了: {e}")
else:# 没有发生异常时执行的代码print("上面代码完美运行")
finally:# 无论是否发生异常都执行的代码print("一定会执行的代码")

在这里插入图片描述

三、抛出异常(异常传播)

在Python中,raise 是一个关键字,用于手动抛出一个异常。使用 raise 可以触发异常处理机制,这在你需要对错误条件进行显式控制时非常有用。以下是 raise 的使用:

def foo():raise Exception('服务器内部错误') # 抛出异常def bar():print('bar ...')foo() # 获取到异常,但是没用使用try 。。 捕获,导致函数中断执行print('bar done')try:bar()
except Exception as e:print(e) # 最外层捕获
finally:print('程序结束了')

在这里插入图片描述

四、 自定义异常

Python的错误其实也是class,所有的错误类型都继承自Exception,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。

我们可以定义自己的异常类,通过继承 Exception 类实现。

class CustomError(Exception):passdef coo():raise CustomError('网络错误。。。')
try:print('自定义错误测试。。。')coo()
except CustomError as e:print(f"捕获自定义错误: {e}")

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CTFHub XSS DOM 跳转
  • Python面试整理-第三方库
  • C++面向对象高级编程(I)侯捷 自我总结版
  • vim、sublime、notepad文本编辑器的使用
  • 爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(二)
  • 设计模式介绍
  • 测试面试宝典(四十二)—— 接口测试什么时候介入
  • thinkphp 关联查询例子
  • 苹果手机录音删除了怎么恢复?快收藏,这3个方法超简单!
  • Learning vtkjs之Calculator
  • 我菜单为什么跟着滑动了?!!—— 固定定位为什么会失效?
  • ubuntu下Xsens_MTi_300传感器的python驱动安装
  • 数据科学 - 数据预处理 (数据清洗,结构化数据)
  • window安装elasticsearch和可视化界面kibana
  • 企业级-实现Nginx的静态文件服务器映射
  • $translatePartialLoader加载失败及解决方式
  • 【知识碎片】第三方登录弹窗效果
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • docker-consul
  • Java基本数据类型之Number
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python 装饰器(一)
  • SSH 免密登录
  • 大主子表关联的性能优化方法
  • 前端存储 - localStorage
  • 提醒我喝水chrome插件开发指南
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​linux启动进程的方式
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #include<初见C语言之指针(5)>
  • #window11设置系统变量#
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (函数)颠倒字符串顺序(C语言)
  • (回溯) LeetCode 78. 子集
  • (九)c52学习之旅-定时器
  • (转)原始图像数据和PDF中的图像数据
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Micro Framework初体验
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net6使用Sejil可视化日志
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net项目IIS、VS 附加进程调试
  • .Net中的设计模式——Factory Method模式
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @AutoConfigurationPackage的使用
  • @Autowired标签与 @Resource标签 的区别