【发布时间】:2020-05-08 21:08:09
【问题描述】:
我正在尝试将用 MATLAB 编写的代码转换为 python。其中一个名为“dbstack”的函数被大量使用。此函数返回调用函数的名称、其文件名和调用它的文件中的行号。这也是对所有前身文件递归完成的,这意味着这提供了有关调用调用函数的文件的信息。 Python有没有这样的等价物?
【问题讨论】:
标签: python matlab code-conversion
我正在尝试将用 MATLAB 编写的代码转换为 python。其中一个名为“dbstack”的函数被大量使用。此函数返回调用函数的名称、其文件名和调用它的文件中的行号。这也是对所有前身文件递归完成的,这意味着这提供了有关调用调用函数的文件的信息。 Python有没有这样的等价物?
【问题讨论】:
标签: python matlab code-conversion
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)
【讨论】:
traceback.extract_tb() 和 traceback.extract_stack() 可能会为您的用例返回包含足够信息的对象——inspect 模块提供了一些额外的实现细节,例如您可能不需要的 code_context .