这是一个相当无用的断言错误;它不会告诉所涉及的表达式的值(假设使用的常量实际上是变量名):
$ 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/