全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用

news2024/12/23 6:09:43

全网最适合入门的面向对象编程教程:29 类和对象的 Python 实现-断言与防御性编程和 help 函数的使用

image

摘要:

在 Python 中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条件。本文主要介绍了断言的应用场景和特点以及 assert 语句的使用,同时介绍了防御性编程和 help()函数。

原文链接:

FreakStudio的博客

往期推荐:

可能是全网最适合入门的面向对象编程教程:Python实现-嵌入式爱好者必看!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

全网最适合入门的面向对象编程教程:03 类和对象的Python实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的 Python 实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的 Python 实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的 Python 实现-@property 装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用

全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的Python实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图

全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释

全网最适合入门的面向对象编程教程:20 类和对象的 Python 实现-组合关系的实现与 CSV 文件保存

全网最适合入门的面向对象编程教程:21 类和对象的 Python 实现-多文件的组织:模块 module 和包 package

全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误

全网最适合入门的面向对象编程教程:23 类和对象的 Python 实现-抛出异常

全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理:try/except语句、文件读写示例、Exception引用

全网最适合入门的面向对象编程教程:25 类和对象的 Python 实现-Python 判断输入数据类型

全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句

全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句

全网最适合入门的面向对象编程教程:27 类和对象的 Python 实现-Python 中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总

更多精彩内容可看:

CM3调试系统简析

肝了半个月,嵌入式技术栈大汇总出炉

比赛获奖的武林秘籍:09 一文速通计算机设计大赛,比赛人必看的获奖秘籍

比赛获奖的武林秘籍:08 一文速通光电设计大赛,电子人必看

比赛获奖的武林秘籍:07 一文速通电子设计大赛,电子人必看的获奖秘籍!

比赛获奖的武林秘籍:06 5 分钟速通比赛路演答辩,国奖选手的血泪经验!

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍:04 电子类比赛嵌入式开发快速必看的上手指南

比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

比赛获奖的武林秘籍:00 学科竞赛-工科类大学生绕不开的话题,你了解多少?

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

断言(assert)

在 Python 编程中,断言(assert)作为一种强大的调试工具,被广泛应用于代码的调试和开发过程中。通过在代码中插入断言语句,我们可以对代码的正确性进行严格的检查。当断言的条件为假时,程序会引发 AssertionError 异常并停止执行。而当断言的条件为真时,程序会如常继续执行,仿佛断言语句从未存在过。因此,合理使用断言,对于确保代码的质量和稳定性具有重要意义。

assert  表达式 , 描述

以下面代码为例,可以看到“1==2”的结果为 False,抛出了 AssertionError。

image

与异常不同**,断言是为了提醒开发人员,在程序中可能出现了无法恢复的错误。对于一些可以预见的错误,例如未找到相关文件,用户通常能够自行纠正或重试。**然而,断言并非为这类问题而生。在无 bug 的程序中,断言条件将永远保持沉默。但如果违背了断言,程序就会崩溃并报告错误,向开发人员明确指出究竟是哪个“不可能”的情况出现了。这使得追踪和修复程序中的 bug 变得更为轻松。**在 Python 中,断言语句是一种用于调试的辅助功能,它并非处理运行时错误的机制。使用断言的目的在于帮助开发人员更快地找到可能导致 bug 的根本原因。**除非程序中确实存在 bug,否则断言绝不会抛出错误。

防御性编程与 unittest 单元测试库

断言一般用在防御型的编程、运行时检查程序逻辑、检查约定、程序常量、检查文档时,在从来不会运行失败的代码不必要加上断言。在单元测试框架中,我们常常使用断言。所谓单元测试,就是指对软件中的最小可测试单元进行检查和验证,通常是一个函数或一个方法。单元测试有助于我们在早期发现错误,提高代码的可靠性和可维护性。在 Python 中,内置了 unittest 单元测试库,可以用来编写测试代码。unittest 中常用的几个常用断言的使用方法如下:

名称作用
assertEqual如两个值相等,则 pass
assertNotEqual如两个值不相等,则 pass
assertTrue判断 bool 值为 True,则 pass
assertFalse判断 bool 值为 False,则 Pass
assertIsNone不存在,则 pass
assertIsNotNone存在,则 pass

关于 unittest 单元测试库中断言的使用我们将会在之后讲到,这里仅作简单了解即可。

在使用断言时,需要特别注意的点是在命令行中使用-o 和-oo 标志,或者修改 CPython 中的 PYTHONOPTIMIZE 环境变量,可以全局性地禁用断言。此时,所有的断言语句都将失效,程序将直接跳过而不处理断言,因此不会执行任何条件表达式。

在 Python 的实际开发过程中,我们经常会遇到性能问题。所谓性能问题,就是 Python 程序运行得相对较慢。遇到性能问题时,我们有两种方法可以进行优化:一是修改源代码,优化逻辑,提升性能;二是打开 Python 解释器的优化功能。

Python 解释器提供了两种优化级别:

  • level1 优化:通过将内置的__debug__全局变量设置为 false,并删除 assert 语句,达到优化效果。
  • level2 优化:除了 level1 的优化措施外,还会删除函数的文档说明(即函数后面的’‘’'注释)。

使用-O 参数可以达到 level1 优化效果(大写字母 O),而使用-OO 参数则可以达到 level2 优化效果(两个都是大写字母 O)。这些优化方法对于提升 Python 程序的运行速度非常有帮助。

python -o main.py

help()函数

在 Python 中,有许多内置函数和模块,其中一些可能不太起眼,但却非常实用。其中之一就是 help()函数。help()函数用于获取有关 Python 对象、模块、函数或方法的帮助信息。它可以更好地理解 Python 的功能和如何正确使用它们。

help()函数的基本用法非常简单,只需在交互式 Python 解释器中输入对象、模块、函数或方法的名称,并将其作为参数传递给 help()函数。

help语法:help([object])

这里,我们看看 assert 函数的 help 输出:

image

在这里插入图片描述

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

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

相关文章

jmeter-beanshell学习13-设置等待时间

接口测试时候,如果交易成功,一切正常,如果交易失败,可能会涉及回滚。之前写的都是做完交易,紧接着去查库,就可能遇到还没回滚完成,已经查完库了,查出来的数据不准确。既然写beanshel…

前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发

项目介绍 本软件是一款强大的所见即所得前端页面设计器,是低代码开发领域的基础设施,生成的代码不依赖于任何框架,实测可以将前端布局工作的耗时减少80%以上,最关键的是,它实现了人人都可以写前端页面的梦想。 不用写…

相似度计算方法

一、相似度计算方法 相似度算法是计算两个或多个对象之间相似程度的方法,这些对象可以是文本、图像、音频等不同类型的数据。在计算机科学、信息检索、推荐系统、数据挖掘等领域中,相似度算法具有广泛的应用。 二、应用场景 搜索引擎:用于文…

实验3-2 计算符号函数的值

//实验3-2 计算符号函数的值#include <stdio.h> #include <math.h>int main() {int n 0;scanf("%d",&n);int sign;if(n > 0)sign1;else if(n < 0)sign-1;else sign0;printf("sign(%d) %d", n, sign); }

0731作业+梳理

一、作业 1.用两个进程完成拷贝 代码&#xff1a; #include<myhead.h> //定义一个求文件长度函数 int line(const char *pd1,const char *pd2) { int fd1 -1; int fd2 -1; //以只读形式打开源文件 if((fd1 open(pd1,O_RDONLY))-1) { p…

人最大的内耗,是不肯放过自己

你是否也有过这样的经历&#xff1a; 对别人漫不经心的一句话就琢磨很久&#xff0c;生怕产生隔阂&#xff1b;对自己曾经犯过的错误念念不忘&#xff0c;始终无法释怀&#xff1b;工作里出现一点小失误&#xff0c;便整宿翻来覆去难以入眠......每天陷在迷茫、焦虑、恐慌的情…

matlab 2022a 安装教程

下载安装包 &#xff0c;多个压缩包&#xff0c;依次解压 第一步 第二步 2、输入文件安装密钥&#xff1a;“50874-33247-14209-37962-45495-25133-28159-33348-18070-60881-29843-35694-31780-18077-36759-35464-51270-19436-54668-35284-27811-01134-26918-26782-54088” 50…

二百四十九、Linux——修改ulimit限制数量:打开文件的最大数量和用户进程的最大数量

一、目的 在安装OceanBase时脚本报错 [ERROR] OBD-1007: (127.0.0.1) The value of the ulimit parameter "open files" must not be less than 20000 (Current value: 1024), Please execute echo -e "* soft nofile 20000\n* hard nofile 20000" >&…

TiDB系列之:TiCDC同步TiDB数据库数据到Kafka集群Topic

TiDB系列之&#xff1a;TiCDC同步TiDB数据库数据到Kafka集群Topic 一、Changefeed 概述Changefeed 状态流转操作 Changefeed 二、同步数据到Kafka创建同步任务&#xff0c;复制增量数据 KafkaSink URI 配置 kafka最佳实践TiCDC 使用 Kafka 的认证与授权TiCDC 集成 Kafka Connec…

移动硬盘有盘符却难启?数据恢复全攻略

现象解析&#xff1a;移动硬盘有盘符打不开的谜团 在日常的数字生活中&#xff0c;移动硬盘作为数据存储与传输的重要工具&#xff0c;扮演着不可或缺的角色。然而&#xff0c;当用户遇到移动硬盘在系统中显示盘符却无法正常访问的情况时&#xff0c;无疑会令人感到焦头烂额。…

hackme漏洞打靶

1.安装好靶机后点击启动进入这样的一个页面 然后我们就要去找这个靶机的IP地址&#xff0c;首先将该虚拟机网卡设置为net模式&#xff0c;然后在物理机中查看自己ip&#xff0c;看看vmnet8的地址c段是什么&#xff0c;我这里是209&#xff0c;然后用工具去扫描该c段下哪个ip开放…

离乡路远,归途已断

首发于我的个人独立博客 guqing’s blog 每次踏上回乡的路&#xff0c;我心中总有一种难以言喻的情感。故乡&#xff0c;那片孕育我成长的土地&#xff0c;依然静静地躺在那儿&#xff0c;似乎未曾改变。 然而&#xff0c;每次回到家乡&#xff0c;我都能感受到微妙的变化&…

探索七款前沿UI设计软件:创新与实践

之前我们分享了制作原型的有用工具。制作完原型后&#xff0c;我们需要优化界面&#xff0c;这就是 UI 设计师的任务了。UI 设计软件对设计师来说非常重要。UI 设计工具的使用是否直接影响到最终结果的质量&#xff0c;所以有人会问&#xff1a;UI 界面设计使用什么软件&#x…

【切面编程】自定义注解实现操作日志

创建一个项目工程 引入相关依赖 <!-- aop切面 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- lombok --> <dependency><gro…

24导游证报名照片要求是什么❓整理好了❗

24导游证报名照片要求是什么❓整理好了❗ 导游资格考试今天开始报名啦&#xff01; ⚠️考生们注意&#xff0c;需要上传免冠证件照、身份证扫描件、学历证明等照片信息&#xff01; ⚠️这里需要注意一下上传的照片文件信息规格&#xff0c;否则上传失败&#xff0c;无法完…

中国星坤耳机插座系列:空间与音质的体验升级

在现代电子设备日益普及的今天&#xff0c;耳机插座作为连接音频设备与用户的重要接口&#xff0c;其设计和性能直接影响着用户的听觉体验。中国星坤耳机插座以其精巧的设计和卓越的性能&#xff0c;为用户提供了既节省空间又保证音质的解决方案。本文将探讨星坤耳机插座的特点…

Vue3_对接声网实时音视频_多人视频会议

目录 一、声网 1.注册账号 2.新建项目 二、实时音视频集成 1.声网CDN集成 2.iframe嵌入html 3.自定义UI集成 4.提高进入房间速度 web项目需要实现一个多人会议&#xff0c;对接的声网的灵动课堂。在这里说一下对接流程。 一、声网 声网成立于2014年&#xff0c;是全球…

知乎信息流广告怎么投?一文读懂知乎广告开户及投放!

作为中国领先的问答社区&#xff0c;知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广&#xff0c;云衔科技提供了全方位的知乎广告开户及代运营服务&#xff0c;助力您的品牌在知乎上实现快速增长。 一、知…

提单和提货单有什么区别❓一文读懂‼️

提货单与提单的区别 在国际贸易和物流领域中&#xff0c;提货单&#xff08;D/O&#xff09;和提单&#xff08;B/L&#xff09;是两个关键的单据&#xff0c;它们在货物清关和提货过程中扮演着重要角色。以下是对这两个单据的详细解释和它们之间的区别。 提货单&#xff08;…

pdf文件怎么删除页面?看完就能学会的四种删除pdf页面方法!

pdf文件怎么删除页面&#xff1f;在日常使用PDF文档的过程中&#xff0c;我们时常会遇到一些没必要存在的页面&#xff0c;保留这些页面可能带来多重不利影响&#xff0c;首先它们会打断阅读的流畅性&#xff0c;这会让人在阅读时感到突兀与不适&#xff0c;其次&#xff0c;这…