我正在尝试调试 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.
PS 我对进入 . 给出的字节码级别不感兴趣dis.dis。
杨魅力
蝴蝶刀刀
相关分类