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

「Python 基础」错误、调试与测试

文章目录

    • 1. 错误处理
    • 2. debug
      • assert
      • logging
      • pdb
      • IDE
    • 3. unittest
      • 编写
      • 运行
      • setUp 与 tearDown
    • 4. doctest

1. 错误处理

try:# 可能有异常的代码块r = 10/int('2')
except ValueError as e:# 有异常时执行,捕获指定类型及其子类型的错误print('ValueError', e)
except ZeroDivisionError as e:# 当前面的异常命中后,后面不会再次捕获print('ZeroDivisionError', e)
else:# 无异常时执行print('no error.')
finally# 上面结束后一定会执行print('finally')

调用栈

从上到下时整个错误的调用函数链,依次从外到内;

记录错误

try:r = 10/int('0')
except Exception as e:# 记录错误堆栈logging.exception(e)

抛出异常

# 自定义异常
class FooError(ValueError):pass# 抛出异常
raise FooError('invalid value')# 捕获异常,原样抛出
except ValueError as e:raise# 转化成另一种异常抛出
except ZeroDivisionError:raise ValueError('input error.')

程序主动抛出异常时,应该在文档写清楚可能抛出的异常及其原因,方便调用者处理相应的错误;

2. debug

assert

如果断言的语句不成立,assert 语句会抛出 AssertionError;

assert n!=0, 'n is zero.'

可以通过 -O 参数关闭断言,关闭后,assert 语句相当于 pass

logging

import logging
logging.basicConfig(level=logging.INFO)logging.info('xxx')

logging level

  • CRITICAL
  • ERROR
  • WARNING - 根记录器级别默认级别
  • INFO
  • DEBUG
  • NOTSET - 默认级别,处理所有消息

logging 的另一个好处时通过配置,一条消息可以同时输出到不同的地方,比如console、文件、database

多使用logging

pdb

以参数-m pdb启动.py,单步运行;

python -m pdb xxx.py

pdb界面指令

指令作用
l查看代码
n单步执行
pp 变量名 查看变量
q结束调试,退出程序
c继续运行

set_trace()

设置断点,进入调试后,通过c命令运行自动暂停在该断点处;

IDE

Visual Studio Code

PyCharm

3. unittest

TDD

测试驱动开发(Test Driven Development);

单元测试是未来重构代码的保障;

单元测试要覆盖常用输入组合,边界条件,异常;

单元测试不能太复杂,否则自身也可能有 bug;

编写

import unittest
class TestDict(unittest.TestCase):def test_init(self):d = dict(a=1, b='test')# 断言相等self.assertEqual(d.a, 1)self.assertEqual(d.b, 'test')# 断言为真self.assertTrue(isinstance(d, dict))def test_keyerror(self):d = dict()# 期待语句块中抛出指定类型的 Errorwith self.assertRaises(KeyError):value = d['empty']

单元测试类继承自unittest.TestCase

单元测试方法必须以test开头命名,否则不会被执行;

运行

通过代码运行

if __name__ == '__main__':unittest.main()

通过命令参数运行

python -m unittest mytest

setUp 与 tearDown

在每调用一个单元测试的前后被执行;

4. doctest

文档测试,既可以用来运行测试,也是实例代码;

严格按照 Python 交互命令行的输入和输出来判断测试结果的正确性;

在测试异常时,可用...表示中间省略的输出;

class Dict(dict):"""Simple dict but also support access as x.y style.>>> d1 = Dict()>>> d1['x'] = 100>>> d1.x100>>> d1.y = 200>>> d1['y']200>>> d2 = Dict(a=1, b=2, c='3')>>> d2.c'3'>>> d2['empty']Traceback (most recent call last):...KeyError: 'empty'>>> d2.emptyTraceback (most recent call last):...AttributeError: 'Dict' object has no attribute 'empty'"""def __init__(self, **kw):super(Dict, self).__init__(**kw)def __getattr__(self, key):try:return self[key]except KeyError:raise AttributeError(f"'Dict' object has no attribute '{key}'")def __setattr__(self, key, value):self[key] = valueif __name__ == "__main__":import doctestdoctest.testmod()

运行

python mydict.py

没有输出既是运行正确;


上一篇:「Python 基础」面向对象编程
专栏:《Python 基础》

PS:感谢每一位志同道合者的阅读,欢迎关注、评论、赞!

相关文章:

「Python 基础」错误、调试与测试

文章目录1. 错误处理2. debugassertloggingpdbIDE3. unittest编写运行setUp 与 tearDown4. doctest1. 错误处理 try:# 可能有异常的代码块r 10/int(2) except ValueError as e:# 有异常时执行,捕获指定类型及其子类型的错误print(ValueError, e) except ZeroDivis…...

17万字 JUC 看这一篇就够了(一) (精华)

JUC 今天我们来进入到 Java并发编程 JUC 框架的学习 ,内容比较多,但希望我们都能静下心来,耐心的看完这篇文章 文章目录JUC进程概述对比线程创建线程ThreadRunnableCallable线程方法APIrun startsleep yieldjoininterrupt打断线程打断 park终…...

C++右值引用/移动语义

在此之前,我们所用的引用,其实都是左值引用。 int a 10; int& ra a; 下面我们来重新认识一下引用: 而何为左值?左值引用其实是什么?请往下看~ 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff…...

小樽C++ 多章⑧ (叁) 指针与字符串、(肆) 函数与指针

目录 叁、函数与字符串 肆、函数与指针 4.1 指针作为函数参数 4.2 函数返回指针 4.3 函数指针与函数指针数组 4.4 结构体指针 ​​​​​​​​​​​​​​小樽C 多章⑧ (壹) 指针变量https://blog.csdn.net/weixin_44775255/article/details/129031168 小樽C 多章⑧ …...

Mybatis-Plus

新建个项目 引入lombok devtools web mysql驱动 pom.xml引入mybatis-plus依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency> sp…...

yolov8行人识别教程(2023年毕业设计+源码)

yolov8识别视频直接上YOLOv8的结构图吧&#xff0c;小伙伴们可以直接和YOLOv5进行对比&#xff0c;看看能找到或者猜到有什么不同的地方&#xff1f; Backbone&#xff1a;使用的依旧是CSP的思想&#xff0c;不过YOLOv5中的C3模块被替换成了C2f模块&#xff0c;实现了进一步的轻…...

CAD指令框找不到了怎么调出来?CAD指令框调出方法

CAD制图过程中&#xff0c;为了提高设计师的绘图效率&#xff0c;经常会用到各种CAD命令快捷键&#xff0c;可是CAD指令框突然不见了&#xff0c;这就让人很头疼了。CAD指令框找不到了怎么调出来呢&#xff1f;本节内容小编以浩辰CAD软件为例来给大家分享一下CAD指令框调出方法…...

一般用哪些工具做大数据可视化分析?

做数据分析这些年来&#xff0c;从刚开始的死磕excel&#xff0c;到现在成为数据分析行业的偷懒大户&#xff0c;使用过的工具还真不少&#xff01; 这篇分享一些我在可视化工具上的使用心得&#xff0c;由简单到复杂&#xff0c;按照可视化类型一共分为纯统计图表类、GIS地图…...

Python每日一练(20230308)

目录 1. Excel表列名称 ★ 2. 同构字符串 ★★ 3. 分割回文串 II ★★★ &#x1f31f; 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 1. Excel表列名称 给你一个整数 columnNumber &#xff0c;返回它在 Excel 表中相对应的列名称。 例如&#xff1…...

jvm之堆解读

堆&#xff08;Heap&#xff09;的核心概述 堆针对一个JVM进程来说是唯一的&#xff0c;也就是一个进程只有一个JVM&#xff0c;但是进程包含多个线程&#xff0c;他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。 Java堆区…...

重构·改善既有代码的设计.02

前言之前在《重构改善既有代码的设计.01》中初步了解了重构的基本前提&#xff0c;基础原则等入门知识。今天我们继续第二更......识别代码的坏味道Duplicated Code 重复代码。最单纯的Duplicated Code就是“同一个类中含有相同的表达式”或“两个互为兄弟的子类内含有相同表达…...

脑电信号处理总成

目录一. EEG(脑电图)1.1 脑波1.2 伪迹1.2.1 眼动伪迹1.2.2 肌电伪迹1.2.3 运动伪迹1.2.4 心电伪迹1.2.5 血管波伪迹1.2.6 50Hz和静电干扰1.3 伪迹去除方法1.3.1 避免伪迹产生法1.3.2 直接移除法1.3.3 伪迹消除法一. EEG(脑电图) 1.1 脑波 脑波&#xff08;英语&#xff1a;br…...

判断推理之图形推理

考点一动态位置变化&#xff08;一&#xff09;平移1.特征&#xff1a;图形在平面上的移动&#xff0c;图形本身的大小和形状不发生改变。2.方向&#xff1a;直线&#xff08;上下、左右、斜对角线&#xff09;&#xff0c;绕圈&#xff08;顺时针、逆时针&#xff09;3.距离&a…...

【预告】ORACLE Unifier v22.12 虚拟机发布

引言 离ORACLE Primavera Unifier 最新系统 v22.12已过去了3个多月&#xff0c;应盆友需要&#xff0c;也为方便大家体验&#xff0c;我近日将构建最新的Unifier的虚拟环境&#xff0c;届时将分享给大家&#xff0c;最终可通过VMWare vsphere (esxi) / workstation 或Oracle …...

Sql执行流程与Redo log、 Undo log、 Bin log日志文件

文章目录Sql执行流程与日志文件Sql的执行流程Redo LogBin logUndo logSql执行流程与日志文件 Sql的执行流程 mysql的内部组件结构如下图所示 连接器 与客户端建立连接&#xff0c;检验登录密码&#xff0c;分配相应权限 查询缓存 执行sql语句时会先从这里找一下&#xff0c;…...

如何提高软件测试执行力

高效的测试执行力 不管在哪个行业&#xff0c;高校的执行力都是不可或缺的。在软件测试行业更是这样。有些测试人员&#xff0c;很勤奋也很吃苦&#xff0c;但是可能最终不能很好的完成测试任务。究其原因就是一个测试执行力的问题。 高效执行就是有目标&#xff0c;有计划&…...

Open3D 计算点到平面的距离

目录 一、算法原理二、代码实现三、结果展示一、算法原理 平面外一点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x...

DDD领域驱动设计初探

DDD 强调领域模型要兼顾业务和技术两个视角。 我们怎么用一套系统化的方法&#xff0c;抽丝剥茧、一步一步地把需求落实到代码呢&#xff1f;咱们看看下面这张图&#xff0c;它表示了领域驱动设计中的主要流程。 领域驱动设计主要的开发流程你可以看到&#xff0c;在整个开发流…...

C中AES_cbc_encrypt加密对应java中的解密

前言知识&#xff1a; 1.AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准&#xff0c;作为分组密码&#xff08;把明文分成一组一组的&#xff0c;每组长度相等&#xff0c;每次加密一组数据&#xff0c;直到加密完整个明文&#xff09;。 2.在AES标准…...

演化算法:乌鸦搜索算法 (Crow Search Algorithm)

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 在机器学习中&#xff0c;我们所要优化的问题很多时候难以求导&#xff0c;因此通常会采用一些演化算法&#xff08;又称零…...

3步掌握DoL-Lyra整合包:从零到精通的完整指南

3步掌握DoL-Lyra整合包&#xff1a;从零到精通的完整指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS Degrees of Lewdity中文整合包DoL-Lyra为您提供了一站式的游戏体验解决方案。这个自动化构建…...

PyTorch 2.8镜像实战案例:自媒体创作者批量生成短视频封面图工作流

PyTorch 2.8镜像实战案例&#xff1a;自媒体创作者批量生成短视频封面图工作流 1. 场景痛点与解决方案 短视频创作者每天面临的最大挑战之一&#xff0c;就是需要为每个视频制作吸引眼球的封面图。传统方式要么依赖设计师&#xff08;成本高、周期长&#xff09;&#xff0c;…...

实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案

实时文本转换&#xff1a;XUnity.AutoTranslator的Unity本地化解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在全球化游戏市场中&#xff0c;语言障碍常常成为玩家体验优质内容的最大阻碍。许多…...

ChatGPT归档数据恢复机制深度解析:原理与实战指南

ChatGPT归档数据恢复机制深度解析&#xff1a;原理与实战指南 在AI应用开发中&#xff0c;数据管理是一个绕不开的话题。随着项目迭代和用户量增长&#xff0c;对话记录、训练数据、配置信息等会迅速累积。为了平衡存储成本与数据可用性&#xff0c;归档&#xff08;Archive&a…...

Seed-Coder-8B-Base体验报告:这个开源代码模型到底强在哪里?

Seed-Coder-8B-Base体验报告&#xff1a;这个开源代码模型到底强在哪里&#xff1f; 1. 开篇&#xff1a;为什么选择Seed-Coder-8B-Base 在代码生成模型的海洋中&#xff0c;Seed-Coder-8B-Base以其独特的优势脱颖而出。作为字节团队开源的8B参数级模型&#xff0c;它不仅体积…...

终极WebSocket消息压缩优化指南:async-http-client性能调优实战

终极WebSocket消息压缩优化指南&#xff1a;async-http-client性能调优实战 【免费下载链接】async-http-client Asynchronous Http and WebSocket Client library for Java 项目地址: https://gitcode.com/gh_mirrors/as/async-http-client async-http-client是一款强…...

保姆级教程:OCR文字识别镜像WebUI使用,上传图片即识别

保姆级教程&#xff1a;OCR文字识别镜像WebUI使用&#xff0c;上传图片即识别 1. 认识OCR文字识别镜像 OCR&#xff08;光学字符识别&#xff09;技术能将图片中的文字转换为可编辑的文本内容。本教程将详细介绍如何使用基于CRNN模型的OCR文字识别镜像&#xff0c;通过简单的…...

流水线设计避坑指南:什么时候该用?深度怎么选?看完这篇就懂了

流水线设计实战决策&#xff1a;吞吐率与硬件成本的黄金分割点 在芯片设计和FPGA开发领域&#xff0c;流水线技术就像一把双刃剑——用得好可以大幅提升系统性能&#xff0c;用得不当则可能造成资源浪费甚至引入新的瓶颈。我曾在一个图像处理芯片项目中&#xff0c;因为错误估计…...

如何用Downr1n实现iOS设备有线降级:从原理到实践的分步指南

如何用Downr1n实现iOS设备有线降级&#xff1a;从原理到实践的分步指南 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n 面对iOS系统升级后的性能下降和兼容性问题&#xff0c;许多iPh…...

Cherry Studio集成火山方舟模型实战:从接入到性能调优全解析

最近在项目中尝试将火山方舟的模型集成到 Cherry Studio 里&#xff0c;整个过程踩了不少坑&#xff0c;也总结了一些经验。今天就来和大家分享一下从接入到性能调优的完整实战过程&#xff0c;希望能帮到有同样需求的开发者。 1. 背景与痛点&#xff1a;为什么集成过程让人头疼…...