1

我想知道,出于调试目的,是否可以在执行导入后查看您正在使用的命名空间和模块,此外还可以查看调用函数的位置。

如果我的代码中有一个函数 f(x) 和一个相当复杂的结构,有没有办法在不到处添加打印的情况下查看调用 f(x) 的位置?

类似 f.print_occurance()

"f was called in function integrate"
"f was called in function linspace"
"f was called in function enumerate"

类似的事情。

至于第一个问题,假设我导入了一个模块“import somemodule”现在如果该模块导入了其他模块,我可以在不查找 somemodule.py(或其头文件,如果它存在的话)的情况下查看已导入/使用的命名空间和模块在 c/cpp 中)。

抱歉,如果这是一个新手问题,这似乎是我应该知道的错误处理和调试的基本技巧,但谷歌搜索没有返回任何有用的信息。

4

2 回答 2

2

您可以编写自己的 f.print_occurence() 属性。创建一个在函数启动时标记为“真”的变量,然后 f.print_occurence() 将识别该标志并相应地打印。

于 2012-10-29T17:39:07.800 回答
1

您绝对应该查看回溯检查模块。

一个简单的方法来做到这一点:

traceback.print_stack(limit=2)

这将很难看,但会告诉您正在调用哪个函数以及调用它的内容。您可以查看模块以了解如何使用它们来满足您的需求。

您可以使用sys.modules查看导入的模块

于 2012-10-29T17:44:08.547 回答