我正在用Python为我的简单编程语言编写解释器。解释期间发生错误时,将引发Python异常。问题在于,堆栈跟踪确实很丑陋,因为当我浏览程序的结构并对其进行解释时,它包含许多递归调用。而且从堆栈跟踪中,您无法真正看到失败时代码在程序结构中的什么位置。
我知道我可以自己捕获所有异常并重新抛出一个新异常,以添加一些有关异常发生位置的信息,但是由于它是递归的,因此我必须一次又一次地重新抛出。
我想知道是否没有更简单的方法。例如,在解释器代码中的路径,行号和函数名旁边,我还可以打印出该函数当时在堆栈中该函数在解释程序代码中的位置的信息。
答案 0 :(得分:0)
您可以编写sys.excepthook
来打印所需的任何回溯。我经常使用这样的钩子,该钩子使用traceback
模块来打印正常的回溯,但是增加了一些行,这些行给出了有趣的局部变量的值(通过f_locals
内省)。