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

news2024/11/16 9:29:29

目录

    • 专栏列表
    • 前言
    • 一、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 unittest

def 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):
    pass

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赛蓝企业管理系统 AuthToken/Index 身份认证绕过漏洞复现

0x01 产品简介 赛蓝企业管理系统是一款为企业提供全面管理解决方案的软件系统,它能够帮助企业实现精细化管理,提高效率,降低成本。系统集成了多种管理功能,包括但不限于项目管理、财务管理、采购管理、销售管理以及报表分析等&am…

【WPF开发】如何将工程打包成单独的EXE安装包

一、安装NSIS与HM NIS Edit 1、下载和安装NSIS NSIS官网 2、下载和安装HM NIS Edit HM NIS Edit官网 点击下载后等待几秒,就会弹出下载提示 双击下载的安装包,点击“OK” 点击“下一步” 点击“我接受” 更改路径后,点击安装即可 二、打包软…

SpringSecurity-1(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity 1 初识权限管理1.1 权限管理的概念1.2 权限管理的三个对象1.3 什么是SpringSecurity 2 SpringSecurity第一个入门程序2.1 SpringSecurity需要的依赖2.2 创建web工程2.2.1 使用maven构建web项目2.2.2 配置web.xml2.2.3 创建springSecurity.xml2.2.4 加载springSe…

【leetcode详解】寻找两个正序数组的中位数:最简单的【困难】题?

简评&#xff1a; 可以说&#xff0c;要做出来这道题&#xff0c;实际上是非常简单的 //这也是笔者目前唯一解出来的唯一一道【困难】题哈哈哈哈 思路解析&#xff1a; 将两个向量合并 class Solution { public:double findMedianSortedArrays(vector<int>& nums1…

c# MetroForm 和 IntPtr unsafe

一、NuGet安装框架 修改代码 效果&#xff1a; 结果&#xff1a; TopLevel与TopMost属性 frm.TopLevel false; //Form.TopLevel 获取或设置一个值&#xff0c;该值指示是否将窗体显示为顶级窗口。frm.TopMost false; //Form.TopMost 获取或设置一个值&#xff0c;指示该窗体…

嵌入式人工智能(43-基于树莓派4B的刷卡模块射频识别RFID-RC522)

1、RFID 射频识别&#xff08;RFID&#xff0c;Radio Frequency Identification&#xff09;是一种无线通信技术&#xff0c;用于自动识别和追踪标签上的信息。这项技术基于射频信号的传输和接收&#xff0c;通过将标签上的数据存储在特定的芯片中&#xff0c;实现物体的识别和…

上市公司绿色信息披露质量评分数据(2008-2023年)

数据来源&#xff1a;基础数据来源于上市公司年报/社会责任报告/环境报告以及ZJ会及统计局 时间跨度&#xff1a;2008-2023年 数据范围&#xff1a;企业及行业层面 数据指标&#xff1a; 按照是否货币化分类企业对于环境信息的披露:对于货币化的信息&#xff0c;定量和定性…

共襄恰青赛马节盛事 共享农业产业园成果

恰青赛马节是那曲一年一度的草原盛事&#xff0c;是藏北规模盛大的传统节日&#xff0c;承载着那曲悠久的文化底蕴&#xff0c;体现了藏北各族群众丰富的传统习俗&#xff0c;更是深受民众欢迎。今年的赛马节上&#xff0c;色尼区国家现代农业产业园紧抓机遇&#xff0c;设置农…

Android设备发送蓝牙文件到电脑笔记本失败解决

Android设备发送蓝牙文件到电脑笔记本失败解决 文章目录 Android设备发送蓝牙文件到电脑笔记本失败解决一、前言二、解决1、比较旧的电脑2、大部分新的电脑 三、其他1、发送蓝牙文件到Window电脑端小结2、可传输的蓝牙文件的文件类型 一、前言 普通手机之间蓝牙配对后&#xf…

软件测试开发

软件测试的职业发展 起点&#xff1a;功能测试 走管理 业务专家行业业务专家行业业务发展专家 走技术 测试开发资深测试开发测试架构师/全栈测试工程师 软件开发模型 瀑布模型 V模型和W模型 W模型和V模型都把软件的开发视为需求&#xff0c;设计&#xff0c;编码&#x…

SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击

在过去的三个月里&#xff0c;eSentire 的安全研究团队发现信息窃密恶意软件 SolarMarker 都没有发动攻击&#xff0c;却在最近忽然重返舞台。此前&#xff0c;SolarMarker 的运营者使用 SEO 投毒或者垃圾邮件来引诱受害者&#xff0c;受害者试图下载一些文档的免费模板&#x…

非对称加密:数据安全的双重保障

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日OJ_牛客HJ73 计算日期到天数转换

目录 牛客HJ73 计算日期到天数转换 解析代码 牛客HJ73 计算日期到天数转换 计算日期到天数转换_牛客题霸_牛客网 解析代码 用一个数组存放每月的累积天数输入的日期天数 当月的天数 当月之前的累积天数&#xff0c;如果包含二月&#xff0c;再去判断是否为闰年&#xff0c;…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业&#xff0c;或者跳槽选行业的&#xff0c;看这篇&#xff01; 如果你什么都不懂&#xff0c;家里也没有矿&#xff0c;那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

精通推荐算法19:特征交叉之DeepFM -- 异构模型Wide侧引入FM

1 引言 Wide & Deep的提出&#xff0c;使推荐模型同时具备记忆和泛化能力。通过融合低阶和高阶特征交叉&#xff0c;开启了推荐算法异构模型的风潮。后续越来越多的模型&#xff0c;在其基础上进一步优化&#xff0c;并取得了不错的效果。DeepFM就是其中一个很经典的模型&…

渗透测试--钓鱼网站实验

实验原理 使用工具 setoo1kit&#xff0c;构造钓鱼网站&#xff0c;钓鱼网站可以选择为比较知名的网站&#xff0c;例如学信网。被攻击者访问了钓鱼网站&#xff0c;输入自己的真实账号密码进行登录&#xff0c;账号密码会被 kali 收集 实验步骤 打开 kali 终端&#xff0c;输…

PyCharm中安装和使用FittenCode的AI插件助手

AI 逐步进入生活的方方面面&#xff0c;在编程开发中也不例外&#xff0c;下面简单记录一下 PyCharm IDE中安装和使用FittenCode插件AI助手的过程&#xff1b; 1&#xff0c;假设本地已经安装 PyCharm IDE, 如果还没有安装到如下地址进行下载2024年社区版&#xff1a; Thank …

短视频平台引流玩法

今天盘点了4大视频类的主流平台的精准引流触点&#xff0c;拿去用吧&#xff01;

Qt pdf文件转换操作

qt文件转换操作&#xff0c;包括word转为pdf&#xff1b;Excel转为pdf&#xff1b;PPT转为pdf&#xff1b;image转为pdf&#xff1b;pdf转为文本文件&#xff1b;pdf导出图片&#xff1b;接口如下所示&#xff1a; #pragma once #include <QObject> #include "file…

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么&#xff0c;字符串追加。 2.我们进行模仿&#xff0c;我们先将arr1不断&#xff0c;直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…