Python 断言——改进了失败的自省(introspection)?

标签 python debugging assert syntactic-sugar

这是一个相当无用的断言错误;它不会告诉所涉及的表达式的值(假设使用的常量实际上是变量名):

$ python -c "assert 6-(3*2)"
[...]
AssertionError

在 Python 中是否有更好的 assert 实现更花哨?它不得引入额外的执行开销(断言失败时除外)..并且如果使用 -O 标志则必须关闭。

编辑:我知道断言的第二个参数是一个字符串。我不想写一个 .. 因为它是在被断言的表达式中编码的。 DRY(不要重复自己)。

最佳答案

将您的函数安装为 sys.excepthook -- 参见 the docs .你的函数,如果第二个参数是AssertionError,可以反省你的内心;特别是,通过第三个参数,traceback,它可以获得断言失败的框架和确切位置,通过源代码或字节码获取失败的异常,所有相关变量的值等。模块inspect有帮助。

完全通用地完成它是一项相当大的工作,但是根据您在编写 assert 时愿意接受的限制,它可以大大减轻(例如,将它们限制为与可能涉及闭包的非局部变量等相比,只有局部或全局变量使自省(introspection)更容易。

关于Python 断言——改进了失败的自省(introspection)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308607/

相关文章:

javascript - 使用 QUnit 测试 JS 方法是否抛出 RangeError

python - 如何使用assert语句来确认python3集合的类型

python - 使用贝叶斯优化时队列为空

python - Pandas Dataframes 到 MultiIndex Dataframe 的字典

python - 运输优化(PuLP)

java - 如果有两个JVM 启动,如何调试applet?

python - 在 Python 中创建大型随机内容文件

使用 Flash Builder 调试 OpenLaszlo SWF 运行时应用程序和 Laszlo 基础类 (LFC)

java - 如何在 java 中打印完整的 elasticsearch 调试请求

ocaml - 类型定义中的断言