概述
用过python assert的朋友应该会经常碰到这样的疑惑,如:
(a,b) = (1,'1')
assert a==b # error: AssertionError
在代码调试的时候,很难直观的看出为什么错了,除非写成这样:
assert 1=='1', "fact==expect, [fact]=%s, [expect]=%s" % ([a],[b]) # AssertionError: fact==expect, [fact]=[1], [expect]=['1']
但是这样每次都要去写错误信息,用得频繁了会有些繁琐,本文介绍一种【动态断言】的机制,形如:
assertx('1', "==", 1) # (%s['f'] == %s['e']), [fact]=['1'], [expe]=[1]
代码如下:
1 #encoding=utf-8 2 def assertx(fact, expr, expe): 3 """ #原有的assert看不到表达式内部、且无法自动生成错误信息 4 if __name__=='__main__': 5 assertx(1, "!=", 2) 6 assertx(1, "%s['f'] in %s['e']", [1,11]) 7 assertx([1,100], "%s['e'] in %s['f']", 100) 8 try: 9 assertx('1', "==", 1) 10 except StandardError,e: 11 print e # (%s['f'] == %s['e']), [fact]=['1'], [expe]=[1] 12 13 try: 14 assertx('1', "not in", ['1']) 15 except StandardError,e: 16 print e # when typeSimple, assert: expr.find(' ')==-1, [expr]=['not in'] 17 """ 18 fDc = {'f':fact} 19 eDc = {'e':expe} 20 atFact = expr.find("%s['f']") 21 atExpe = expr.find("%s['e']") 22 if (atFact>-1 and atExpe>-1): #【type=Custom】 23 exprStr = expr 24 if atFact < atExpe: 25 exprFormat = expr%(fDc,eDc) 26 else: 27 exprFormat = expr%(eDc,fDc) 28 else: #【type=Simple】 29 assert expr.find(' ')==-1, 30 "when typeSimple, assert: expr.find(' ')==-1, [expr]=%s"%[expr] 31 exprStr = "(%%s['f'] %s %%s['e'])" % expr # exam: '(%s['f'] == %s['e'])' 32 exprFormat = exprStr%(fDc,eDc) # exam: '("factValue" == "expeValue")' 33 if not eval(exprFormat): # exam: "'%s' == '%s'" 34 raise StandardError("""%s, [fact]=%s, [expe]=%s"""%(exprStr,[fact],[expe]))
转载于:https://www.cnblogs.com/JayveeYao/p/5244874.html
最后
以上就是冷静高山为你收集整理的python assert: 自动生成错误信息的全部内容,希望文章能够帮你解决python assert: 自动生成错误信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复