python异常之assert语句
python的assert语句,是一个断言语句。用于断言某个表达式的值是否符合预期,不符合则停止运行,并且触发AssertionError异常。
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 testassert
assert 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 testassert
raise 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 testassert
assert 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 testassert
assert 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 testassert
assert 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 testassert
assert int(x) \>\= 0,'输入的数必须大于等于0'
AssertionError: 输入的数必须大于等于0
\--------------------
请输入大于等于0的数:9555
您输入的是: 9555
输入正确
1.5 assert用于抽象超类
描述
显式要求子类必须实现抽象超类的方法,可以在超类方法用assert False。
示例
\>>> 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 delegate
self.action()
File "<pyshell#16>", line 5, in action
assert False,'子类必须定义 action'
AssertionError: 子类必须定义 action
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5d3BAZG-1691474813569)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LecFucgz-1691474813569)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijUNJmfF-1691474813570)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pPi6pFCN-1691474813570)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-USBB11OM-1691474813570)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZj3lldZ-1691474813570)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
六、面试宝典
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KJgReePR-1691474813571)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQ2MYs7S-1691474813571)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
简历模板
更多推荐
所有评论(0)