首页 > 解决方案 > Python 调试器函数不存在

问题描述

pdb模块应该包含一个名为 的函数set_trace,但是,当我运行代码时,import pdb; pdb.set_trace()我收到一条错误消息,说module 'pdb' has no attribute 'set_trace'. 即使我的代码是正确的,为什么会发生此错误?

这是我正在执行以获取此错误的 code.py 文件:

print("Hello, World!")
import pdb
pdb.set_trace()
print("Goodbye, World!")

这是我的程序的完整输出:

你好世界!
你好世界!
回溯(最近一次通话最后):
  文件“code.py”,第 3 行,在
    导入 pdb
  文件“/usr/lib/python3.6/pdb.py”,第 76 行,在
    导入代码
  文件“/tmp/code.py”,第 4 行,在
    pdb.set_trace()

标签: pythonpdb

解决方案


pdb 在执行后首先要做的事情之一就是导入一个名为code. 但是,由于您已将文件命名为code.pyPython 最终会执行这两个文件。当您的文件第二次执行时,它会打印“Hello, World!” 再次留言。此时,Python 在import pdb再次遇到相同的语句时仍在处理第一条语句。在像 C 这样的语言中,这将导致无限递归,但 Python 会自动忽略重复导入(文档)。因此,Python 最终会在初始语句完成执行之前执行下一行代码,pdb.set_trace()这 就是为什么您会看到一条错误消息告诉您不存在的原因。import pdbpdb.set_trace()

要解决此问题,您可以将文件重命名为其他名称,但最好添加一个检查,以便您的代码在由其他文件导入时不会执行:

if __name__ == "__main__":
    print("Hello, World!")
    import pdb
    pdb.set_trace()
    print("Goodbye, World!")

推荐阅读