python异常之assert语句

1 python异常之assert语句

python的assert语句,是一个断言语句。

用于断言某个表达式的值是否符合预期,不符合则停止运行,并且触发AssertionError异常。

1.1 基本用法

用法

assert test_cond [,err_msg]

描述

test_cond:要测试的条件或表达式,test_condition;

err_msg:可选的错误消息;

断言test_cond是否为真,如果为假,则断言失败,触发AssertionError,显示错误消息。

示例

>>> def testassert(x):print('x=',x)assert x >= 0,'x必须大于等于0'print('输入正确')
>>> testassert(9555)
x= 9555
输入正确
>>> testassert(-9)
x= -9
Traceback (most recent call last):File "<pyshell#19>", line 1, in <module>testassert(-9)File "<pyshell#17>", line 3, in testassertassert x >= 0,'x必须大于等于0'
AssertionError: x必须大于等于0

1.2 assert等效于raise AssertionError

用法

if __debug__:if not test_cond:raise AssertionError([err_msg]) 

描述

assert test_cond [,err_msg]等效写法如上面。

即assert断言语句是raise AssertionError的简写。

debug:内置变量,默认为True;

AssertionError:内置异常;

示例

>>> def testassert(x):print('x=',x)print('__debug__ =',__debug__)if __debug__:if not x >= 0:raise AssertionError('x必须大于等于0')print('输入正确')
>>> testassert(9555)
x= 9555
__debug__ = True
输入正确
>>> testassert(-9)
x= -9
__debug__ = True
Traceback (most recent call last):File "<pyshell#24>", line 1, in <module>testassert(-9)File "<pyshell#22>", line 6, in testassertraise AssertionError('x必须大于等于0')
AssertionError: x必须大于等于0

1.3 关闭assert

用法

python -O  xxx.py

描述

命令行执行python文件时,用-O参数,关闭assert语句的执行,或者使得__debug__为False。

示例

testassert.py

1   import sys
2   def testassert(x):
3       print('您输入的是:',x)
4       assert int(x) >= 0,'输入的数必须大于等于0'
5       print('输入正确')
6       
7   if __name__ == '__main__':
8       print('sys.argv =',sys.argv)
9       testassert(sys.argv[1])

在cmd用命令行执行

# 输入正确,不用-O ,会执行 assert 语句
D:\python39>python E:\documents\F盘\testassert.py 9555
sys.argv = ['E:\\documents\\F盘\\testassert.py', '9555']
您输入的是: 9555
输入正确
# 输入负数,不用-O ,会执行 assert 语句
D:\python39>python E:\documents\F盘\testassert.py -9555
sys.argv = ['E:\\documents\\F盘\\testassert.py', '-9555']
您输入的是: -9555
Traceback (most recent call last):File "E:\documents\F盘\testassert.py", line 9, in <module>testassert(sys.argv[1])File "E:\documents\F盘\testassert.py", line 4, in testassertassert int(x) >= 0,'输入的数必须大于等于0'
AssertionError: 输入的数必须大于等于0
# -O 忽略 assert 语句的执行
D:\python39>python -O E:\documents\F盘\testassert.py -9555
sys.argv = ['E:\\documents\\F盘\\testassert.py', '-9555']
您输入的是: -9555
输入正确

1.4 assert用于断言业务约束条件

描述

python的assert语句用于收集断言业务约束条件,而不是python语法相关的错误。

示例

比如,业务规则要求输入大于等于0的数字。

1   import traceback
2   def testassert(x):
3       assert int(x) >= 0,'输入的数必须大于等于0'
4       print('输入正确')
5       
6   if __name__ == '__main__':
7       print('__debug__ =',__debug__)
8       while True:
9           print('-'*20)
10          try:
11              x=input("请输入大于等于0的数:")
12              print('您输入的是:',x)
13              testassert(x)
14          except ValueError as ve:
15              print('必须输入数字')
16              traceback.print_exc()
17          except Exception as e:
18              print(e)
19              traceback.print_exc()
20          else:
21              break

cmd命令行执行

D:\python39>python  E:\documents\F盘\testassert.py
--------------------
请输入大于等于0的数:梯阅线条
您输入的是: 梯阅线条
必须输入数字
Traceback (most recent call last):File "E:\documents\F盘\testassert.py", line 12, in <module>testassert(x)File "E:\documents\F盘\testassert.py", line 3, in testassertassert int(x) >= 0,'输入的数必须大于等于0'
ValueError: invalid literal for int() with base 10: '梯阅线条'
--------------------
请输入大于等于0的数:tyxt
您输入的是: tyxt
必须输入数字
Traceback (most recent call last):File "E:\documents\F盘\testassert.py", line 12, in <module>testassert(x)File "E:\documents\F盘\testassert.py", line 3, in testassertassert int(x) >= 0,'输入的数必须大于等于0'
ValueError: invalid literal for int() with base 10: 'tyxt'
--------------------
请输入大于等于0的数:-9
您输入的是: -9
输入的数必须大于等于0
Traceback (most recent call last):File "E:\documents\F盘\testassert.py", line 12, in <module>testassert(x)File "E:\documents\F盘\testassert.py", line 3, in testassertassert int(x) >= 0,'输入的数必须大于等于0'
AssertionError: 输入的数必须大于等于0
--------------------
请输入大于等于0的数:9555
您输入的是: 9555
输入正确

1.5 assert用于抽象超类

描述

显式要求子类必须实现抽象超类的方法,可以在超类方法用assert False。

关于抽象超类的内容可以参考《python类接口和抽象超类》

示例

>>> class AbsSuper:def delegate(self):self.action()def action(self):assert False,'子类必须定义 action'>>> class Provider(AbsSuper):pass>>> Provider().delegate()
Traceback (most recent call last):File "<pyshell#19>", line 1, in <module>Provider().delegate()File "<pyshell#16>", line 3, in delegateself.action()File "<pyshell#16>", line 5, in actionassert False,'子类必须定义 action'
AssertionError: 子类必须定义 action

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

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

相关文章

FreeSWITCH continue_on_fail

先看一段简单的dialplan&#xff1a; <action application"set" data"continue_on_failtrue"/> <action application"bridge" data"user/1001"/> <action application"log" data"ERR run here"/&g…

【JDK新特性】JDK和Springboot各版本新特性介绍

目录 参考资料 以下是一些较新版本的JDK的主要新特性介绍&#xff1a; JDK 8&#xff1a; Lambda 表达式&#xff1a;引入了函数式编程的概念&#xff0c;使得代码更简洁、可读性更强。Stream API&#xff1a;提供了一种高效处理集合数据的方式&#xff0c;支持并行处理。默认…

Python能做大项目(7) - Poetry: 项目管理的诗和远方之二

依赖管理 实现依赖管理的意义 我们已经通过大量的例子说明了依赖管理的作用。总结起来&#xff0c;依赖管理不仅要检查项目中声明的直接依赖之间的冲突&#xff0c;还要检查它们各自的传递依赖之间的彼此兼容性。 Poetry 进行依赖管理的相关命令 在 Poetry 管理的工程中&am…

基于电商场景的高并发RocketMQ实战-Commitlog基于内存的高并发写入优化、基于JVM offheap的内存读写分离机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

Flutter开发一个Wifi信号测量应用

在之前的一篇文章中我介绍了如何用Jetpack compose来开发一个Android的Wifi信号测量应用&#xff0c;使得可以根据室内不同地点的Wifi信号来生成指纹&#xff0c;用于室内导航&#xff0c;详情可见Jetpack Compose开发一个Android WiFi信号测量应用-CSDN博客。但是Jetpack comp…

【Hadoop】ZooKeeper数据模型Znode

ZooKeeper 数据模型ZnodeZooKeeper 中的时间ZooKeeper 节点属性 ZooKeeper 数据模型Znode 前面提过&#xff0c;Zookeeper相当于文件系统通知机制。既然是文件系统&#xff0c;那就涉及数据模型。 ZooKeeper 的数据模型在结构上和Unix标准文件系统非常相似&#xff0c;都是采用…

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】 目录 分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCSO-…

C# WPF上位机开发(windows pad上的应用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面&#xff0c;但是windows平台不仅仅是电脑…

听GPT 讲Rust源代码--src/tools(27)

File: rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs 文件rust/src/tools/clippy/clippy_lints/src/methods/suspicious_to_owned.rs的作用是实施Clippy lint规则&#xff0c;检测产生潜在性能问题的字符转换代码&#xff0c;并给出相关建议。 在Rus…

概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

详解ibm_t60(945)的板子的保护隔离和ec的待机供电

1.,首先看ec待机条件: 待机供电&#xff0c;32k时钟&#xff0c;复位&#xff0c;适配器检测&#xff0c;开关信号。但是视频居然是找适配器的接口&#xff0c;跟着视频走&#xff0c;所以我先找打了适配器接口j24。vint20为公共点&#xff0c;我查了vint20的所有接线发现没有小…

js右击自定义菜单

功能点&#xff1a;右击阻止默认事件 根据js提供方法window.getSelection()判断当前有值则出现菜单 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

现代 NLP:详细概述,第 1 部分:transformer

阿比吉特罗伊 一、说明 近五年来&#xff0c;随着 BERT 和 GPT 等思想的引入&#xff0c;我们在自然语言处理领域取得了巨大的成就。在本文中&#xff0c;我们的目标是逐步深入研究改进的细节&#xff0c;并了解它们带来的演变。 二、关注就是你所需要的 2017 年&#xff0c;来…

CSRF(Pikachu)

CSRF&#xff08;get&#xff09; 首先我们先登录账号 admin 密码是&#xff1b;123456 点击修改个人信息 用F12或者BP 抓包看看我们的url 那么构成的CSRF攻击payload为http://pikachu.shifa23.com/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboy&phonenum”手机…

美团开店宝集成策略:API连接助力用户运营与客服系统

无代码开发与美团开店宝API的协同作用 随着电子商务的快速发展&#xff0c;商家们迫切需要一种既能提高效率又能降低技术门槛的电商管理方案。美团开店宝API提供了这样一种解决方案&#xff0c;特别是当与无代码开发结合时&#xff0c;它的优势更加明显。无代码开发免去了商家…

44.常用shell之 export - 设置或显示环境变量 的用法及衍生用法

export 是一个在类 Unix 系统的 shell 中常用的命令&#xff0c;用于设置或显示环境变量。环境变量是在操作系统层面定义的&#xff0c;用于控制程序的行为和访问系统资源。以下是 export 命令的基本用法和一些衍生用法的示例&#xff1a; 基本用法 设置环境变量: export VARv…

Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档

1、API 接口文档的几种规范格式 前后端分离项目中&#xff0c;使用规范、便捷的API接口文档工具&#xff0c;可以有效提高团队工作效率。 标准化的API文档的益处&#xff1a; 允许开发人员以交互式的方式查看、测试API接口&#xff0c;以方便使用将所有可暴露的API接口进行分…

普冉PY32系列(十四) 从XL2400迁移到XL2400P

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

React快速入门之组件

组件 文件&#xff1a;Profile.js export default function Profile({isPacked true&#xff0c;head,stlyeTmp,src,size 80}) {if (isPacked) {head head " ✔";}return (<div><h1>{head}</h1><imgsrc{src}alt"Katherine Johnson&q…

cmake 入门笔记

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/dUmsmiwzULQKmjfFILDdag 1. cmake 是什么&#xff1f; 这些年大型 C/C 工程都纷纷转到了 cmake 环境下&#xff0c;那么这个工具到底有什么魅力吸引着…