python核心技术与实战(十五):合理利用assert
15. 合理利用assert15.1 什么是assertassert expression1assert expression1expression215.2 assert的用法例1例2例315.3 assert的错误示例例1例215.1 什么是assertassert语句是一个debug的好工具主要用于测试一个条件是否满足满足什么也不做相当于执行了语句pass不满足抛出AssertionError并返回具体的错误信息可选具体的语法为assert_stmt :: assert expression [, expression]assert expression1一个简单形式的assert语句可写为assert 1 2它相当于以下的两行代码if __debug__: __debug__为一个常数它的取值取决于python程序执行时是否附带了-O这个选项 如Python test.py -O则__debug__的值为Fasle那么程序中的所有assert语句都会失效 if not expression: raise AssertionError注不能对常数__debug__赋值它在python解释器开始运行时就已确定中途无法改变assert expression1expression2稍微复杂一点的assert语句 assert expression1,expression2可写为如下语句assert 1 2, assertion is wrong # 注意不加括号它相当于如下语句if __debug__: if not expression1: raise AssertionError(expression2)总的说来asser语句起到的作用就是检查程序的内部是否符合要求。如可用asser来避免非法输入。如果程序没有bug则assert永远不会抛出异常若出现了bug则asser会抛出异常你也能马上找出问题所在。15.2 assert的用法例1用assert确保apply_distcount()函数在输入原价格和折扣后得出的价格的合理性即0 ≤ result ≤ pre_price代码可写为def apply_discount(price, discount): update_price price * (1 - discount) assert 0 update_price price, updata_price should be not greater than price or not less than 0 return update_price若输入不符合条件则会报以下错误AssertionErrorupdata_price should be not greater than price or not less than 0例2若要计算商品的平均销售价格那么就需要销售额和销售商品数量可写为以下代码def calculate_average_price(total_sales, num_sales): assert num_sales 0, number of sales should be greater than 0 return total_sales / num_sales加入assert语句规定销售数量必须大于0这样就可以防止后台计算未销售的商品。例3当对函数的输入有所要求时可用assert语句作为函数的第一行来assert输入是否符合要求。以下的代码中要求函数的输入必须时列表类型def func(input): assert isinstance(input, list), input must be type of list # 下面的操作都是基于前提input 必须是 list if len(input) 1: ... elif len(input) 2: ... else: ...若输入除了列表类型之外也可以是其他类型而且对不同的输入类型都有不同的处理方式则可使用if…else…结构def func(input): if isinstance(input, list): ... else: ...15.3 assert的错误示例要注意的是assert的检查是可以被关闭的如在执行python程序时加入-O这个选项时就会让assert失效。例1删除课程需要满足两个条件删除者有管理权限该课程存在def delete_course(user, course_id): assert user_is_admin(user), user must be admin assert course_exist(course_id), course id must exist delete(course_id)若assert失效则任何人都可以删除课程且不管课程是否存在都会强制执行删除操作这显然会给程序带来巨大的安全漏洞。正确的写应该是采用条件语句进行相应的检查并合理抛出异常def delete_course(user, course_id): if not user_is_admin(user): raise Exception(user must be admin) if not course_exist(course_id): raise Exception(coursde id must exist) delete(course_id)例2若要打开一个文件进行数据读取、处理等操作则下面的写法也是不正确的def read_and_process(path): assert file_exist(path), file must exist with open(path) as f: ...assert在这里的使用表明强行指定了文件必须存在注意assert的使用表明确定了该情况一定存在或一定不存在但大多数时候这种假设并不成立。另外打开文件的操作也有可能触发其他异常。所以正确的做法是进行异常处理用try…except…解决def read_and_process(path): try: with open(path) as f: ... except Exception as e: ...总的来说assert并不适用于run-time error的检查如打开文件但文件不存在下载东西但中途断网等等这些情况应该用try…except处理更合适。

相关新闻

计算机毕业设计之基于SpringBoot的儿童图书借阅系统的设计与实现

计算机毕业设计之基于SpringBoot的儿童图书借阅系统的设计与实现

儿童图书借阅系统是图书馆中重要的一环,是用户图书借阅的主要渠道。于是经过考虑之后决定开发基于JAVA语言设计与实现了一款简洁、轻便的儿童图书借阅系统。本系统包括以下多个功能模块:用户、图书分类、图书信息、借阅查询、订单信息。本系统采用了JAVA…

2026/7/28 20:12:04 阅读更多 →
题解:AtCoder AT_abc468_b Corridor Watch

题解:AtCoder AT_abc468_b Corridor Watch

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

2026/7/28 20:12:04 阅读更多 →
Wordpress更换域名后台无法打开以及内容页打开全部404

Wordpress更换域名后台无法打开以及内容页打开全部404

推荐资源站:https://zhimalier.com/ 一、wordpress更换域名后台无法打开 在更换之前,先在原来的后台【设置】-【常规】里修改基本的设置,改成新的地址,即可。 有时之前的域名不可用或者什么原因,导致无法访问&#x…

2026/7/28 20:12:04 阅读更多 →

最新新闻

JAVA毕业设计-基于 SpringBoot+Vue 的眼科复诊随访服务管理平台前后端分离的眼科患者跟踪治疗随访管理系统 (源码+LW+部署文档+全bao+远程调试+代码讲解等)

JAVA毕业设计-基于 SpringBoot+Vue 的眼科复诊随访服务管理平台前后端分离的眼科患者跟踪治疗随访管理系统 (源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/28 20:23:10 阅读更多 →
Flow Matching 训练的输入分布问题:从 VAE Latent 统计性质到归一化工程实践——以 VoxFlash-TTS 为例

Flow Matching 训练的输入分布问题:从 VAE Latent 统计性质到归一化工程实践——以 VoxFlash-TTS 为例

Flow Matching 训练的输入分布问题:从 VAE Latent 统计性质到归一化工程实践——以 VoxFlash-TTS 为例 在语音生成和图像生成领域,Flow Matching 作为一种新兴的生成模型训练范式,正逐渐取代扩散模型成为研究热点。然而,在实际应…

2026/7/28 20:23:10 阅读更多 →
高2018级NOIP模拟赛20190831

高2018级NOIP模拟赛20190831

文章目录写在前面考试T1 FFF团T2 maple做数学题T3 数字写在前面 爆long long 的孩子你伤不起 我发现我做题稳扎稳打的好习惯没有了,这可不是什么好事 不能只注重刷题数量 emm,友链:他们的总结 考试 T1 FFF团 我的blog - MZOJ #70 FFF团 …

2026/7/28 20:23:10 阅读更多 →
AI副业启动前必须验证的3个信号,少1个=3个月内必然放弃(附自查清单)

AI副业启动前必须验证的3个信号,少1个=3个月内必然放弃(附自查清单)

更多请点击: https://codechina.net 第一章:AI副业启动前必须验证的3个信号,少1个3个月内必然放弃(附自查清单) 在投入时间与金钱启动AI副业前,仅靠“感兴趣”或“听说很赚钱”远远不够。大量实践者在第6–…

2026/7/28 20:23:10 阅读更多 →
思源宋体:免费开源中文排版终极解决方案,7种粗细轻松驾驭

思源宋体:免费开源中文排版终极解决方案,7种粗细轻松驾驭

思源宋体:免费开源中文排版终极解决方案,7种粗细轻松驾驭 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目寻找专业字体而烦恼吗?…

2026/7/28 20:23:10 阅读更多 →
如何快速永久保存B站缓存视频:m4s-converter终极指南

如何快速永久保存B站缓存视频:m4s-converter终极指南

如何快速永久保存B站缓存视频:m4s-converter终极指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情况&am…

2026/7/28 20:22:09 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻