【发布时间】:2020-07-24 15:51:58
【问题描述】:
我正在尝试调试 Python 内置类。我的调试使我进入了魔术方法(又名 dunder 方法)的领域。
我正在尝试找出调用了哪些 dunder 方法(如果有)。通常我会这样做:
import sys
import traceback
# This would be located where the I'm currently debugging
traceback.print_stack(file=sys.stdout)
但是,traceback.print_stack 并没有给我提供打印在其附近使用的 dunder 方法区域的详细程度。
有什么方法可以以非常详细的方式打印出代码块中实际发生的情况?
示例代码
#!/usr/bin/env python3.6
import sys
import traceback
from enum import Enum
class TestEnum(Enum):
"""Test enum."""
A = "A"
def main():
for enum_member in TestEnum:
traceback.print_stack(file=sys.stdout)
print(f"enum member = {enum_member}.")
if __name__ == "__main__":
main()
我想要上面的示例代码打印出任何使用的 dunder 方法(例如:__iter__)。
目前它打印出调用traceback.print_stack的路径:
/path/to/venv/bin/python /path/to/file.py
File "/path/to/file.py", line 56, in <module>
main()
File "/path/to/file.py", line 51, in main
traceback.print_stack(file=sys.stdout)
enum member = TestEnum.A.
附:我对去dis.dis给出的字节码级别不感兴趣。
【问题讨论】:
标签: python debugging stack traceback magic-methods