2012-10-29 53 views
1

我想知道,为了调试的目的,如果有可能,看看有什么命名空间和模块,您正在使用,一旦你做了一个重要操作和进一步看到那里的函数被调用。的Python:打印functioncalls和命名空间

如果我有一个函数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” 现在,如果该模块导入其他模块,可我看到的命名空间和模块已导入/使用什么头也不抬somemodule.py(或它的头文件如果它存在就像在c/cpp中一样)。

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

+0

如果有内Python中未捕获的异常,那么你会得到的异常与“回溯”,这将提供所有的信息你...所以,我认为这是一个没有问题的问题... [尝试在解释器中输入'10/0'例如] –

+1

退房'inspect'模块 – bossylobster

+0

除了Jon所说的内容:http://docs.python .org/2/library/traceback.html – TheZ

回答

1

你一定要看看tracebackinspect模块。

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

traceback.print_stack(limit=2) 

这将是丑陋,但告诉你哪个函数被调用,什么叫吧。您可以查看模块以了解如何使用它们以满足您的需求。

你可以看一下进口模块,sys.modules

2

你可能会写你自己的f.print_occurence()属性。当函数启动时创建一个标志为'true'的变量,然后f.print_occurence()会识别该标志并进行相应的打印。