python - 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()
解决方案
pdb 在执行后首先要做的事情之一就是导入一个名为code
. 但是,由于您已将文件命名为code.py
Python 最终会执行这两个文件。当您的文件第二次执行时,它会打印“Hello, World!” 再次留言。此时,Python 在import pdb
再次遇到相同的语句时仍在处理第一条语句。在像 C 这样的语言中,这将导致无限递归,但 Python 会自动忽略重复导入(文档)。因此,Python 最终会在初始语句完成执行之前执行下一行代码,pdb.set_trace()
这
就是为什么您会看到一条错误消息告诉您不存在的原因。import pdb
pdb.set_trace()
要解决此问题,您可以将文件重命名为其他名称,但最好添加一个检查,以便您的代码在由其他文件导入时不会执行:
if __name__ == "__main__":
print("Hello, World!")
import pdb
pdb.set_trace()
print("Goodbye, World!")
推荐阅读
- ruby-on-rails-5 - 如何序列化存储的正确字段有一个 has_many through 关系表
- php - 如何更改laravel中的数组结构?
- python - 当每行是一个列表时,替换不适用于多个字符串替换
- react-native - React Native Jest Expo-Native 模块不能为空
- javascript - 单击删除按钮时,所有内容都会删除
- php - 从变量如何将其用于动态实例化具有范围解析的类
- flutter - 为什么我不能将对象中的信息打印到控制台上
- angular - 如何在 ag-grid 单元中实现自定义组件?
- java - Java 几个枚举作为 getter/setter
- android - 如何在 Android 10 中从没有绝对路径的存储中获取文件?