【问题标题】:Python: Print functioncalls and namespacesPython:打印函数调用和命名空间
【发布时间】:2013-12-15 09:12:09
【问题描述】:

出于调试目的,我想知道是否可以在执行导入后查看您正在操作的命名空间和模块,并进一步查看调用函数的位置。

如果我的代码中有一个函数 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 中)的情况下查看已导入/使用的命名空间和模块。

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

【问题讨论】:

标签: python module


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您绝对应该看看tracebackinspect 模块。

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

    traceback.print_stack(limit=2)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多