首页 > 编程语言 >Python | assert的使用

Python | assert的使用

时间:2023-06-07 18:46:21浏览次数:35  
标签:语句 断言 Python half alist 列表 assert 使用

如果你在看python代码的时候,会在一些代码中看到assert关键字的语句。本文重点介绍Assert语句的作用以及什么时候应该使用该语句。

什么是断言

  • 程序运行过程中,所有变量的当前值组合构成了“状态”;
  • 每执行一段程序,状态就发生变化;
  • 如果程序有逻辑错误的bug,必定在某处变量值的组合不符合预期,处于错误状态;
  • 将对变量的预期写为断言,可以定位复杂的逻辑错误

assert语句的基础语法

基于语法:

assert <表达式>[,<打印信息>]

​ 上述语句,如果表达式为True,assert语句不会产生任何效果,我们可以像往常一样继续往下执行。如果表达式为False,程序终止,AssertionError,并显示<打印信息>。

Traceback (most recent call last):
  File "/your/path/a.py", line 2, in <module>
    assert False
AssertionError

不加打印信息的assert的使用

例一:寻找一个列表中的最小值

# 断言的例子: 最小值 
alist = [23,12,33,55]
amin = min(alist)
# 列表中最小值: 列表中的数,不大于任何一个数
assert amin in alist and all(amin <= x for x in alist)
print("min=",amin)

​ 上述代码中,语句assert amin in alist and all(amin <= x for x in alist)主要用于检查amin是不是列表中的数并且不大于列表中任何一个数。如果不满足上述条件,则会发生断言错误并停止运行程序。

例二:判断是否是排好序的列表

# 断言的例子:排好序的列表
alist = [12,34,56,78,73]
# 排好序的列表:任何一个数都不会超过它的下一个数
assert all(alist[i] <= alist[i+1] for i in range(len(alist)-1))
print("sorted:",alist)

​ 上述代码中,语句assert all(alist[i] <= alist[i+1] for i in range(len(alist)-1))主要用于检查alist列表中任何一个数都不会超过它的下一个数。如果不满足上述条件(也就是alist列表没有排好序),则会发生断言错误并停止运行程序。

加打印信息的assert的使用

更进一步,我们可以添加断言消息,该消息与断言错误一起显示。

# 断言的例子: 与类型注解配合
def half(n: int) -> int:
	assert isinstance(n,int),"参数n必须是整数"
    return n // 2
print(half(12))
print(half(1.2)) # 其它部分错误使用了half,或者参数错置

输出结果:

6

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_2268\2357812243.py in <module>
----> 1 print(half(1.2))

~\AppData\Local\Temp\ipykernel_2268\475170792.py in half(n)
      1 def half(n: int) -> int:
----> 2     assert isinstance(n,int),"参数n必须是整数"
      3     return n // 2

AssertionError: 参数n必须是整数

​ 上述代码中,语句assert isinstance(n,int),"参数n必须是整数"主要用于检查参数n必须是整数。如果不满足上述条件(也就是half函数参数错置),则会发生断言错误并停止运行程序。

什么时候用/不用断言

  • assert语句是一种调试程序的手段,仅用于定位可能的错误;

  • 断言不能视作算法的一部分;

    • 删去所有的assert语句也不影响程序功能和特性
  • try语句提高程序健壮性,assert不能;

  • 程序正式运行可以跳过所有assert语句

    • python -o main.py

标签:语句,断言,Python,half,alist,列表,assert,使用
From: https://www.cnblogs.com/zhangxuegold/p/17464245.html

相关文章

  • python爬虫——爬取泉州2022年天气数据并做可视化分析
     一、选题的背景为什么要选择此选题?要达到的数据分析的预期目标是什么?从社会、经济、技术、数据来源等方面进行描述(200字以内)(10分)天气作为日常生活中不可忽视的因素,对人们的出行、衣食住行等方面均有影响。此次选题旨在通过对泉州市2022年天气数据的收集和分析,了解该地区......
  • python大数据分析——股票数据可视化
    一、选题的背景    股票市场一直是金融领域的焦点之一,对股票数据进行大数据分析有助于了解市场趋势、预测价格波动、优化投资策略等。随着大数据技术的快速发展和 应用,越来越多的投资者、交易员和分析师开始利用大数据技术来解读和分析股票市场数据。通过对股票数据的......
  • python爬虫:爬取b站热门视频的视频、音频、部分评论和弹幕,并将弹幕进行可视化。
    一.选题背景1.背景:爬虫是从互联网上抓取对于我们有价值的信息。选择此题正是因为随着信息化的发展,大数据时代对信息的采需求和集量越来越大,相应的处理量也越来越大,正是因为如此,爬虫相应的岗位也开始增多,因此,学好这门课也是为将来就业打下扎实的基础。bilibili在当今众多视频网站......
  • python----爬取猪肉价格
    一.选题背景猪肉是餐桌上重要的动物性食品之一,因其纤维较为细软,结缔组织较少,肌肉组织中含有较多的肌间脂肪,成为中国餐桌上不可缺少的一种食材。受餐饮业恢复、消费回暖的带动,猪肉消费逐步增加,生猪价格持续回升,猪肉及相关行业正处于逐步回暖状态。市场猪肉供应和合理价格运行,是涉......
  • python @property、@setter、@deleter的介绍与使用
    @property是一个装饰器,使一个方法可以像属性一样被使用,而不需要在调用的时候带上()0x01@property使用我们通过一个简单的研发需求为背景,逐步解释各个装饰器的使用这里领导给了个需求,开发一个类,可以返回一个人的姓,名字以及全名,十分简单嘛classPerson():def__init__(se......
  • Python大数据分析—BMI有关因素及健康分析
    一、数据说明1、背景介绍21世纪是人类追求健康的世纪;21世纪是人人享有保健的新时代。健康是人生最宝贵的财富!没有健康的身心一切无从谈起。随着经济发展和人们生活水平的迅速提高,人们在尽情享受现代文明成果的同时,生活条件提高了,可食品安全和环境卫生问题却层出不穷,生活质量......
  • amazon linux ssh 使用密码登录
    amazonlinux ssh 使用密码登录1、使用AWS控制台创建的密钥对或者直接通过网页登录注意:使用pem私钥不允许直接登录root用户,只能登录默认用户例如:ec2-user,ubuntu等等2、创建root密码sudopasswdroot3、切换到root用户suroot4、修改sshd_config文件vim/etc/ssh/sshd_conf......
  • percona toolkit之pt-slave-restart使用
    介绍pt-slave-restart是一款mysql主从异常处理工具,监控replica端SQL_THREAD是否正常,如果异常pt-slave-restart尝试跳过导致错误的事务,然后重新启动SQL_THREAD已达到修复SQL_THREAD的目的。 测试MySQL主从复制source端mysql>select*fromt1;+----+-------+|id|name......
  • 拟合剩余使用寿命 (RUL) 估计的指数退化模型
    指数退化模型定义为                                         ......
  • 【20230607】【用Python让Excel飞起来】 第一章 python 快速上手 I
    001安装Anacondaanaconda.com直接下载,然后安装记得安装的时候将path和link.py点上,不然回头去配置环境变量有一些麻烦如何判断成功安装在CMD中输入conda-V即可查看002安装配置pycharm直接安装即可,官网下载,然后安装注意pycharm的pro版本是收费的,edu邮箱可以免费1年......