1.断言概念:
断言是一个调试工具,它的作用是发现异常而不是处理异常。
python的 assert(断言)用于判断表达式,在表达式为false的时候触发异常。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,
例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。
语法:assert expression 或者 assert expression [, arguments]
等同于:
if not expression:
raise AssertionError
或者
if not expression:
raise AssertionError(arguments)
示例:
assert True #条件为 True 正常执行
assert 1==1 #条件为 True 正常执行
assert 1==2 #条件为 False 触发异常
assert False #条件为 False 触发异常
import sys
assert ('linux' in sys.platform)
#判断当前是否是linux系统,如果不是直接触发异常,不执行后续还有的程序
class Gender:
Male = 1 # 男
Female = 2 # 女
@classmethod
def IsValid(cls, val):
if val in (cls.Male, cls.Female):
return True
return False
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
assert Gender.IsValid(gender), "Invalide Gender:{}".format(gender)
assert age >= 0, "Invalide age:{}".format(age)
2.断言关闭
assert是一个调试工具,在功能开发并测试完毕之后,正式发布之前,应该先把assertion语句全部去掉(或者使其失效)。
python中关闭assert的方法:
方法1:python -O 文件名
方法2:直接注释(或者删除)所有的assert语句。比较直观和暴力。
3.断言使用原则
使用断言:
使用断言捕捉不应该发生的非法情况;
使用断言对函数的参数进行确认;
在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查
不使用断言:
不要用于测试用户提供的数据,或者那些需要在所有情况下需要改变检查的地方
不要用于检查你认为在通常使用中可能失败的地方。断言用于非常特别的失败条件。你的用户绝不看到一个AssertionError,如果看到了,那就是个必须修复的缺陷
特别地不要因为断言只是比一个明确的测试加一个触发异常矮小而使用它。断言不是懒惰的代码编写者的捷径。
不要将断言用于公共函数库输入参数的检查,因为你不能控制调用者,并且不能保证它不破坏函数的合约。
不要将断言用于你期望修改的任何错误。换句话,你没有任何理由在产品代码捕获一个AssertionError异常。
不要太多使用断言,它们使代码变得晦涩难懂。