【问题标题】:What's the equivalent of MATLAB's 'dbstack' in Python 3?Python 3 中 MATLAB 的“dbstack”等价物是什么?
【发布时间】:2020-05-08 21:08:09
【问题描述】:

我正在尝试将用 MATLAB 编写的代码转换为 python。其中一个名为“dbstack”的函数被大量使用。此函数返回调用函数的名称、其文件名和调用它的文件中的行号。这也是对所有前身文件递归完成的,这意味着这提供了有关调用调用函数的文件的信息。 Python有没有这样的等价物?

【问题讨论】:

    标签: python matlab code-conversion


    【解决方案1】:

    traceback 模块可能是您正在寻找的。它没有任何一个功能可以完全替代 dbstack,但它具有共同提供类似体验的功能。

    import traceback
    
    # print to stderr
    traceback.print_stack()
    
    # grab stack lines and manually manipulate them
    for line in traceback.format_stack():
      print(line)
    

    您还可以在inspect 模块中找到类似的信息。堆栈跟踪不是它的主要目的,但它们可以在那里访问。

    import inspect
    
    # Each frame is a Named Tuple
    # FrameInfo(frame, filename, lineno, function, code_context, index)
    for frame in inspect.stack():
      print(frame)
    

    【讨论】:

    • inspect.stack() 完美运行,因为我需要堆栈跟踪数据不是作为字符串而是单独的。有没有办法让那些也可以追溯?
    • traceback.extract_tb()traceback.extract_stack() 可能会为您的用例返回包含足够信息的对象——inspect 模块提供了一些额外的实现细节,例如您可能不需要的 code_context .
    猜你喜欢
    • 2015-03-14
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多