python assert: 自动生成错误信息

用过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]))
时间: 2025-01-13 13:16:37

python assert: 自动生成错误信息的相关文章

自动生成版本信息,重新编译指定文件,一键编译IAR工程同时生成hex,bin,out文件

平台:IAR + windows_bat 1.自动生成版本信息 目的: 脚本自动更新程序svn对应的的版本号 前提: svn需要安装command line (参考 https://jingyan.baidu.com/article/a3a3f8113f89198da2eb8aed.html) 主要技术点: 具体.bat脚本主要来源于网络,文件放置在agv_dev_platform->User目录下,编译脚本将生成svnversion.h文件,文件内容仅是SVN_REVISION的一个宏,最终程

python实现自动生成oracle awr报告

目前在规划.开发性能自动化执行框架,其中有个环节很有意思,就是如何通过框架自动获得场景执行期间的oracle awr报告.虽然Oracle客户端提供的awrrpt.sql脚本可以提供交互方式生成awr报告,但并不能直接使用在自动化框架中,至少需要做一些改造,将交互的模式变成可以静默执行. 一 问题分析 经过对问题的分析,有两种基本的解决思路: A.  在oracle服务器上部署shell脚本,使用shell命令启动oracle的sqlplus执行autoawr.sql,其中autoawr.sql

&lt;整理&gt; 使用Python Sphinx自动生成代码文档

使用Sphinx自动生成代码文档 参考来源: https://blog.csdn.net/sinat_29957455/article/details/83657029 https://www.cnblogs.com/xuzijie/p/9677621.html 欢迎讨论交流,如有侵权请联系本人! 版本信息 Python 3.6.8 :: Anaconda, Inc. Sphinx 1.8.4 前置步骤 安装Python和pip,使用pip安装Sphinx. 在项目目录中创建src文件夹,用来存

Python项目自动生成当前项目的requirements文件

使用pip freeze $ pip freeze > requirements.txt 这种方式是把整个环境中的包都列出来了,如果是虚拟环境可以使用. 通常情况下我们只需要导出当前项目的requirements.txt,这时候就推荐pipreqs了 使用 pipreqs 这个工具是个好帮手,可以通过对项目目录的扫描,自动发现使用了那些类库,自动生成依赖清单,只生成项目相关的依赖到requirements.txt 安装 pip install pipreqs 使用 使用也很简单 pipreqs

python pandas 自动生成批量测试数据插入数据库 mysql

1.python连接数据库游标 # coding:utf-8 from sqlalchemy import create_engine class connet_databases: def __init__(self): ''' # 初始化数据库连接,使用pymysql模块 # MySQL的用户:root, 密码:147369, 端口:3306,数据库:mydb ''' _host = '39.108.131.88' _port = 3306 _databases = 'san_jin_sq'

python 项目自动生成 requirements.txt 文件

生成 requirements.txt 文件的目的: 安装 pthon 项目时需要把此项目所有依赖的第三方包安装完成.项目依赖的第三方包统一放到 requirements.txt 文件中即可. 怎么自动生成 requirements.txt 文件? 安装 pipreqs 第三方包:pip install pipreqs 在 setup.py 文件的路径下执行命令:pipreqs . 项目结构如下: 原文地址:https://www.cnblogs.com/ronky/p/9777057.html

Python——flask-sqlalchemy 自动生成符合Sqlachemy的Model:sqlautocode/sqlacodegen使用方式

代办 sqlautocode(目前没有测试成功过) sqlacodegen(测试可用) http://www.cnblogs.com/kramer/p/3982741.html http://blog.csdn.net/kaku21/article/details/42741595 http://stackoverflow.com/questions/17632980/sqlautocode-error-when-attempting-to-generate-schema http://blog

【Python】自动生成html文件查看指定目录中的所有图片

获取本目录下的pic子目录中的所有图片(jpg,png,bmp,gif等,此处以jpg文件为例),然后生成一个image.html文件,打开该html文件即可在浏览器中查看pic子目录中的所有图片. #coding:utf-8 import os,sys def showImageInHTML(imageTypes,savedir): files=getAllFiles(savedir+'\\pic') images=[f for f in files if f[f.rfind('.')+1:]

python SQLAlchemy自动生成models文件

1.安装SQLAcodegen pip install sqlacodegen 2.执行 sqlacodegen mysql://root:[email protected]:3306/test > models.py 会在当前目录下生成models.py 3.如果是python3  会报错 No module named 'MySQLdb' 这个时候安装pymysql. 然后在sqlacodegen 的__init__.py文件里加上 import pymysql pymysql.instal