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()
答案 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!")