Python常用断言函数实例汇总
Pythonassert语句,又称断言语句,可以看做是功能缩小版的if语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python解释器会报AssertionError错误。
assert语句的语法结构为:
assert表达式
assert语句的执行流程可以用if判断语句表示(等效),如下所示:
if表达式==True:
程序继续执行
else:
程序报AssertionError错误
有读者可能会问,明明assert会令程序崩溃,为什么还要使用它呢?这是因为,与其让程序在晚些时候崩溃,不如在错误条件出现时,就直接让程序崩溃,这有利于我们对程序排错,提高程序的健壮性。
因此,assert语句通常用于检查用户的输入是否符合规定,还经常用作程序初期测试和调试过程中的辅助工具。
下面的程序演示了assert语句的用法:
mathmark=int(input())
#断言数学考试分数是否位于正常范围内
assert0<=mathmark<=100
#只有当mathmark位于[0,100]范围内,程序才会继续执行
print("数学考试分数为:",mathmark)
运行该程序,测试数据如下:
90
数学考试分数为:90
再次执行该程序,测试数据为:
159
Traceback(mostrecentcalllast):
File"C:\Users\mengma\Desktop\file.py",line3,in
assert0<=mathmark<=100
AssertionError
可以看到,当assert语句后的表达式值为真时,程序继续执行;反之,程序停止执行,并报AssertionError错误。
常用断言函数
常用
这里介绍几个常用断言的使用方法,可以一定程度上帮助大家对预期结果进行判断。-
- assertEqual
- assertNotEqual
- assertTrue
- assertFalse
- assertIsNone
- assertIsNotNone
- assertEqual和assertNotEqual
- assertEqual:如两个值相等,则pass
- assertNotEqual:如两个值不相等,则pass
使用方法:
assertEqual(first,second,msg)其中first与second进行比较,如果相等则通过;msg为失败时打印的信息,选填;断言assertNotEqual反着用就可以了。
- assertTrue和assertFalse
- assertTrue:判断bool值为True,则pass
- assertFalse:判断bool值为False,则Pass
使用方法:
- assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;msg选填;断言assertFalse如果表达式为假,则pass
- assertIsNone和assertIsNotNone
- assertIsNone:不存在,则pass
- assertIsNotNone:存在,则pass
使用方法:
assertIsNone(obj,msg)检查某个元素是否存在
总结:
常用
assertEqual(a,b)a==b
assertNotEqual(a,b)a!=b
assertTrue(x)bool(x)isTrue
assertFalse(x)bool(x)isFalse
assertIs(a,b)aisb2.7
assertIsNot(a,b)aisnotb2.7
assertIsNone(x)xisNone2.7
assertIsNotNone(x)xisnotNone2.7
assertIn(a,b)ainb2.7
assertNotIn(a,b)anotinb2.7
assertIsInstance(a,b)isinstance(a,b)2.7
assertNotIsInstance(a,b)notisinstance(a,b)2.7
其它
assertAlmostEqual(a,b)round(a-b,7)==0
assertNotAlmostEqual(a,b)round(a-b,7)!=0
assertGreater(a,b)a>b2.7
assertGreaterEqual(a,b)a>=b2.7
assertLess(a,b)aassertLessEqual(a,b)a<=b2.7
assertRegexpMatches(s,re)regex.search(s)2.7
assertNotRegexpMatches(s,re)notregex.search(s)2.7
assertItemsEqual(a,b)sorted(a)==sorted(b)andworkswithunhashableobjs2.7
assertDictContainsSubset(a,b)allthekey/valuepairsinaexistinb2.7
assertMultiLineEqual(a,b)strings2.7
assertSequenceEqual(a,b)sequences2.7
assertListEqual(a,b)lists2.7
assertTupleEqual(a,b)tuples2.7
assertSetEqual(a,b)setsorfrozensets2.7
assertDictEqual(a,b)dicts2.7
assertMultiLineEqual(a,b)strings2.7
assertSequenceEqual(a,b)sequences2.7
assertListEqual(a,b)lists2.7
assertTupleEqual(a,b)tuples2.7
assertSetEqual(a,b)setsorfrozensets2.7assertDictEqual(a,b)dicts2.7
使用时机:
那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:
- 防御性的编程
- 运行时对程序逻辑的检测
- 合约性检查(比如前置条件,后置条件)
- 程序中的常量
- 检查文档
- 例:防御性编程中添加断言
在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。