当前位置:   article > 正文

python异常之assert语句_python assert语句

python assert语句

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

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

1.1 基本用法

用法

 assert test\_cond \[,err\_msg\]
  • 1

描述

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1.2 assert等效于raise AssertionError

用法

 if \_\_debug\_\_:  
     if not test\_cond:  
         raise AssertionError(\[err\_msg\]) 
  • 1
  • 2
  • 3

描述

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

1.3 关闭assert

用法

 python \-O  xxx.py
  • 1

描述

命令行执行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\])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
---------------------------END---------------------------

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/645753
推荐阅读
相关标签