Python调试器功能不存在

时间:2018-06-23 20:07:24

标签: python pdb

pdb模块should包含一个名为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!")

这是我程序的完整输出:

Hello, World!
Hello, World!
Traceback (most recent call last):
  File "code.py", line 3, in 
    import pdb
  File "/usr/lib/python3.6/pdb.py", line 76, in 
    import code
  File "/tmp/code.py", line 4, in 
    pdb.set_trace()

1 个答案:

答案 0 :(得分:3)

pdb执行后要做的第一件事就是导入一个模块 称为code。但是,由于您已将文件命名为code.py,Python结束了 执行两个文件。当您的文件第二次执行时,它会打印 “你好,世界!”再次留言。此时,Python仍在处理 当第一个import pdb语句再次遇到同一条语句时。在一个 像C这样的语言,这将导致无限递归,但是Python 自动忽略重复的导入 (documentation)。 因此,Python最终执行了代码的下一行pdb.set_trace()在初始import pdb语句执行完毕之前,这就是为什么 您会看到一条错误消息,告诉您pdb.set_trace()不存在。

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

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