出于调试目的,我想知道是否可以在导入之后查看正在操作的名称空间和模块,并进一步查看函数被调用的位置。
如果我在我的代码中有一个函数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"一些类似的东西来做这个。
至于第一个问题,假设我现在导入了一个模块“导入某些模块”,如果该模块导入了其他模块,我可以看到哪些名称空间和模块已经被导入/使用而不需要查找somemodule.py (或者它的头文件,如果它存在于c/cpp中)。
如果这是一个新手问题,很抱歉,这似乎是我应该知道的用于错误处理和调试的基本技巧,但谷歌搜索没有返回任何有用的信息。
发布于 2012-10-30 01:44:09
您绝对应该看看traceback和inspect模块。
获取一种简单的方法:
traceback.print_stack(limit=2)这将是丑陋的,但告诉您哪个函数正在被调用,以及是什么调用了它。您可以查看这些模块,了解如何使用它们来满足您的需求。
您可以使用sys.modules查看导入的模块
发布于 2012-10-30 01:39:08
您可以编写自己的f.print_occurence()属性。创建一个标记为'true‘的变量。当函数启动时,f.print_occurence()将识别该标记并相应地打印。
https://stackoverflow.com/questions/13126664
复制相似问题