Python | assert关键字

news2024/9/22 13:42:47

Python断言assert是帮助代码流畅的调试工具。断言主要是假设程序员知道或总是希望是真的,因此将它们放在代码中,这样这些失败不会允许代码进一步执行。

简单地说,断言是一个布尔表达式,用来检查语句是True还是False。如果语句为True,则不执行任何操作并继续执行,但如果语句为False,则停止执行程序并抛出错误。

Python assert语句流程图

在这里插入图片描述

Python assert关键字语法

语法: assert condition, error_message(optional)
参数
condition:返回True或False的布尔值条件。
error_message:在AssertionError的情况下,在控制台中打印的可选参数。
返回:AssertionError,如果条件计算为False。

在Python中,assert关键字有助于完成此任务。此语句接受一个布尔条件作为输入,当返回True时,不做任何事情并继续正常的执行流程,但如果计算结果为False,则引发AssertionError。

例如:

# initializing number
a = 4
b = 0
 
# using assert to check for 0
print("The value of a / b is : ")
assert b != 0
print(a / b)

输出

The value of a / b is : 
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Input In [19], in <cell line: 10>()
      8 # using assert to check for 0
      9 print("The value of a / b is : ")
---> 10 assert b != 0
     11 print(a / b)

AssertionError: 

这段代码试图通过在执行除法操作之前检查b的值是否为0。a初始化为4,b初始化为0。程序打印消息a / b的值是:assert语句检查b是否不等于0。由于b为0,assert语句失败并引发AssertionError。
由于失败的assert语句引发异常,程序终止,不再继续执行下一行的print语句。

带有error_message参数的assert

a = 4
b = 0
 
# using assert to check for 0
print("The value of a / b is : ")
assert b != 0, "Zero Division Error"
print(a / b)

输出

AssertionError: Zero Division Error

在函数内部使用assert断言

在本例中,assert语句用于函数内部,以在计算矩形的面积之前验证矩形的长度和宽度是否为正。如果断言为False,则会引发AssertionError,并显示消息“Length and width must be positive”。如果断言为True,则函数返回矩形的面积;如果为False,则退出并返回一个错误。为了展示如何在各种情况下使用assert,该函数被调用两次,一次使用正输入,一次使用负输入。

def calculate_rectangle_area(length, width):
    # Assertion to check that the length and width are positive
    assert length > 0 and width > 0, "Length and width"+ \
                "must be positive"
    # Calculation of the area
    area = length * width
    # Return statement
    return area
 
 
# Calling the function with positive inputs
area1 = calculate_rectangle_area(5, 6)
print("Area of rectangle with length 5 and width 6 is", area1)
 
# Calling the function with negative inputs
area2 = calculate_rectangle_area(-5, 6)
print("Area of rectangle with length -5 and width 6 is", area2)

带有布尔值条件的断言

在这个例子中,assert语句检查布尔条件x < y是否为真。如果断言失败,则引发AssertionError。如果断言通过,程序将继续并打印x和y的值。

# Initializing variables
x = 10
y = 20
 
# Asserting a boolean condition
assert x < y
 
# Printing the values of x and y
print("x =", x)
print("y =", y)

输出

x = 10
y = 20

检查变量类型的断言

在本例中,assert语句检查变量a和b的类型是否分别为str和int。如果任何断言失败,它将引发AssertionError。如果两个断言都通过,程序继续并打印a和b的值。

# Initializing variables
a = "hello"
b = 42
 
# Asserting the type of a variable
assert type(a) == str
assert type(b) == int
 
# Printing the values of a and b
print("a =", a)
print("b =", b)

输出

a = hello
b = 42

断言字典的值

# Initializing a dictionary
my_dict = {"apple": 1, "banana": 2, "cherry": 3}

# Asserting the contents of the dictionary
assert my_dict["apple"] == 1
assert my_dict["banana"] == 2
assert my_dict["cherry"] == 3

# Printing the dictionary
print("My dictionary contains the following key-value pairs:", my_dict)

输出

My dictionary contains the following key-value pairs: 
{'apple': 1, 'banana': 2, 'cherry': 3}

实际应用

这在任何开发领域的测试和质量保证角色中都有更大的用处。根据应用程序使用不同类型的断言。下面是一个简单的程序演示,该程序只允许调度所有热食品的批次,否则拒绝整个批次。

# initializing list of foods temperatures
batch = [40, 26, 39, 30, 25, 21]
 
# initializing cut temperature
cut = 26
 
# using assert to check for temperature greater than cut
for i in batch:
    assert i >= 26, "Batch is Rejected"
    print (str(i) + " is O.K" )

输出

40 is O.K
26 is O.K
39 is O.K
30 is O.K

运行时异常:

AssertionError: Batch is Rejected

为什么要使用Python assert语句?

在Python中,assert语句是一个强大的调试工具,可以帮助识别错误并确保代码按预期运行。下面是使用assert的几个理由:

  • 调试:代码所做的假设可以用assert语句进行验证。通过在整个代码中放置assert语句,可以快速找到错误并调试程序。
  • 文档:在代码中使用assert语句可以作为文档。断言语句使其他人更容易理解和使用您的代码,因为它们显式地描述了您的代码所做的假设。
  • 测试:为了确保满足某些需求,在单元测试中经常使用assert语句。通过在测试中合并assert语句,可以确保代码正常工作,并且所做的任何更改都不会损坏当前功能。
  • 安全性:您可以使用assert检查程序输入是否符合要求并验证它们。通过这样做,可以避免诸如缓冲区溢出和SQL注入攻击的安全缺陷。

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

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

相关文章

java八股文面试[多线程]——线程的生命周期

笔试题&#xff1a;画出线程的生命周期&#xff0c;各个状态的转换。 5.等待队列(本是Object里的方法&#xff0c;但影响了线程) 调用obj的wait(), notify()方法前&#xff0c;必须获得obj锁&#xff0c;也就是必须写在synchronized(obj) 代码段内。与等待队列相关的步骤和图 …

AI绘画StableDiffusion实操教程:斗破苍穹-小医仙

之前分享过StableDiffusion的入门到精通教程&#xff1a;AI绘画&#xff1a;Stable Diffusion 终极炼丹宝典&#xff1a;从入门到精通 但是还有人就问&#xff1a;安装是安装好了&#xff0c;可是为什么生成的图片和你生成的图片差距那么远呢&#xff1f; 怎么真实感和质感一…

小研究 - Java虚拟机内存管理(四)

Java 语言的面向对象&#xff0c;平台无关&#xff0c;安全&#xff0c;开发效率高等特点&#xff0c;使其在许多领域中得到了越来越广泛的应用。但是由于Java程序由于自身的局限性&#xff0c;使其无法应用于实时领域。由于垃圾收集器运行时将中断Java程序的运行&#xff0c;其…

电机控制::控制技术与控制要求

功能要求性能要求基本FOC基础控制&#xff08;刚性调参&#xff09;稳、准、快系统性能优化先进控制方案&#xff1a; 精准建模惯量辨识&#xff08;机械参数辨识&#xff1a;辨识 or 观测&#xff09;先进控制方案&#xff08;算法环节&#xff09;SMC、ADRC、自适应、扰动观测…

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄

Ubuntu22.04安装中文输入法►由踩坑到上岸版◄ 了解入坑上岸 更新一发&#xff1a;Gedit中文乱码问题的解决 为了方便回忆和记录甚至后面继续重装系统&#xff0c;我还是写一下以便将来用到或参考&#xff5e; 了解 安装Ubuntu22.04&#xff08;截至2023年08月26日11&#xff…

stm32读写片内flash项目总结(多字节读写tongxindu)

1.flash操作驱动程序 a头文件 #ifndef FLASH_H #define FLASH_H #include “stm32f4xx.h” #define BOARD_NUM_ADDR 0x0800C000 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_WAITETIME 50000 //FLASH等待超时时间 //FLASH 扇区的起始地址…

石油石化行业网络监控运维方案,全局态势感知,实时预警

石油石化行业是一个高科技密集型行业&#xff0c;投资巨大、人员众多&#xff0c;各产业价值链的关联度较高&#xff0c;大型石油石化企业实现了上中下游产业的一体化协同发展。随着工业4.0时代的来临&#xff0c;信息化和工业化融合&#xff0c;物联网、云计算等新技术的普及推…

Typore 亲测有效(懂得都懂哈)

Typore 亲测从安装到使用&#xff0c;可以使用&#xff08;具体是什么懂得都懂哈&#xff09; 网盘下载地址:链接&#xff1a;https://pan.baidu.com/s/1w0UiS1szxnO9Lxz6sbXEKg?pwdqwe1 提取码&#xff1a;qwe1 第一步&#xff1a; 下载压缩包进行解压&#xff0c;解压过…

Dataset类实践

Dataset类实践 蚂蚁蜜蜂分类数据集和下载链接https://download.pytorch.org/tutorial/hymenoptera_data.zip Dataset&#xff1a;提供一种方式去获取数据及其lable Q&#xff1a;如何获取每个数据及其lable 重写构造方法和获取标签方法 Q&#xff1a;告诉我们总共有多少数据 …

探索Java集合框架—数据结构、ArrayList集合

一、背景介绍 Java集合的使用相信大家都已经非常得心应手&#xff0c;但是我们怎么做到知其然&#xff0c;更知其所以然这种出神入化的境界呢&#xff1f;我们揭开集合框架底层神秘面纱来一探究竟 目录 一、背景介绍 二、思路&方案 数据结构是什么&#xff1f; 数据结…

cortex-A7 SPI实验 --- STM32MP157

实验目的&#xff1a; 1、数码管显示相同的值 0000 1111 ......9999 2、数码管显示不同的值 1234 一&#xff0c;SPI概念 1&#xff0c;SPI总线是 全双工三线 / 四线同步串行总线&#xff0c;有两根单向数据线(MOSI &#xff0c;MISO)&#xff0c;一根设备片选线&#xff0…

基于SSM的小说网站的设计与实现(论文+源码)_kaic

目 录 1 绪论................................................................................................... 1 1.1 项目背景................................................................................................................ 1 1.2 发展历程..…

《QT+PCL 第五章》点云特征-PFH

QT增加点云特征PFH 代码用法代码 #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d.h> #include <pcl/features/pfh.h>int main

如何用Python实现转行高薪梦?三个热门方向带你入门

Python是一门非常适合转行的编程语言&#xff0c;它有着丰富的应用场景和学习资源&#xff0c;而且语法简单易懂&#xff0c;学习效率高。如果你想要用Python实现转行梦想&#xff0c;那么你可能会问&#xff0c;Python有哪些热门的工作方向&#xff1f;小编这就为你介绍Python…

VUE笔记(四)vue的组件

一、组件的介绍 1、组件的作用 整个项目都是由组件组成 可以让代码复用&#xff1a;相似结构代码可以做成一个组件&#xff0c;直接进行调用就可以使用&#xff0c;提高代码复用性 可以让代码具有可维护性&#xff08;只要改一处&#xff0c;整个引用的部分全部都变&#xf…

SpringBoot的日志级别你了解吗(自定义打印日志)?

1 SpringBoot日志介绍 ⽇志是程序的重要组成部分&#xff0c;想象⼀下&#xff0c;如果程序报错了&#xff0c;不让你打开控制台看⽇志&#xff0c;那么你能找到报错的原因吗&#xff1f; 如果是简单的错误有可能找出来&#xff0c;但是对于开发中的大多数错误还是需要我们打开…

el-backtop返回顶部的使用

2023.8.26今天我学习了如何使用el-backtop组件进行返回页面顶部的效果&#xff0c;效果如&#xff1a; <el-backtop class"el-backtop"style"right: 20px; bottom: 150px;"><i class"el-icon-caret-top"></i></el-backtop&…

WebGL 绘制函数gl.drawArrays

gl.drawArrays&#xff08;&#xff09;的第1个参数 WebGL方法gl.drawArrays&#xff08;&#xff09;既强大又灵活&#xff0c;通过给第1个参数mode指定不同的值&#xff0c;在这个参数上指定不同的值&#xff0c;我们可以按照不同的规则绘制图形。 下图中的7种基本图形是We…

Java项目-苍穹外卖-Day05-Redis技术应用

1.店铺营业状态设置 需求分析和设计 左上角要求是有回显的 所以至少两个接口 1.查询营业状态接口&#xff08;分为了管理端和用户端&#xff09; 2.修改营业状态接口 因为管理端和用户端路径不同&#xff0c;所以现在是至少三个接口的 可以发现如果存到表里除了id只有一个…

【Day-20慢就是快】代码随想录-栈与队列-删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 例&#xff1a; 输入&#xff…