Install your of function as sys.excepthook
-- see the docs. Your function, if the second argument is AssertionError
, can introspect to your heart's contents; in particular, through the third argument, the traceback, it can get the frame and exact spot in which the assert failed, getting the failing exception through the source or bytecode, the value of all relevant variables, etc. Module inspect helps.
Doing it in full generality is quite a piece of work, but depending on what constraints you're willing to accept in how you write your assert
s it can be lightened substantially (e.g. restricting them to only local or global variables makes introspection easier than if nonlocal variables of a closure could be involved, and so forth).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…