我想知道,出于调试目的,是否可以在执行导入后查看正在操作的 namespace 和模块,并进一步查看调用函数的位置。
如果我的代码中有一个函数 f(x) 和一个相当复杂的结构,有没有办法在不到处添加打印的情况下查看 f(x) 的调用位置?
类似于 f.print_occurrence()
"f was called in function integrate"
"f was called in function linspace"
"f was called in function enumerate"
与此类似的操作。
对于第一个问题,假设我导入一个模块“import somemodule” 现在,如果该模块导入其他模块,我可以看到已导入/使用了哪些命名空间和模块,而无需查找 somemodule.py (或其头文件,如果它存在,如 c/cpp 中)。
抱歉,如果这是一个新手问题,这似乎是我应该知道的错误处理和调试的基本技巧,但谷歌搜索没有返回任何有用的东西。
最佳答案
您可以编写自己的 f.print_occurrence() 属性。创建一个在函数启动时标记为“true”的变量,然后 f.print_occurrence() 将识别该标记并相应地进行打印。
关于Python:打印函数调用和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126664/