赞
踩
python的assert语句,是一个断言语句。
用于断言某个表达式的值是否符合预期,不符合则停止运行,并且触发AssertionError异常。
用法
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
用法
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
用法
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 输入正确
描述
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 输入正确
描述
显式要求子类必须实现抽象超类的方法,可以在超类方法用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学习资料,包含面试题、简历资料等具体看下方。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/645753
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。