python pdb
pdb 调试小记
起源
业务层接口获取数据 GET
新接口时, 遇到以下错误
1 | AttributeError: Could not locate column in row for column 'iteritems' |
解决过程
Debug 过程:
首先,在 controller
层接口代码添加 pdb
调试入口.
1 | def get(lotan_session, offset, limit): |
然后,重启服务,模拟请求,程序运行到按照设置的 pdb
处,终端进入另一个类似 python
的 console
, 即开启 pdb
调试.
过程如图:
注意到 lotan_session.build_model(QualityScore, id=score.id)
, 在 build
model 时,使用了 QualityScore
这个数据模型, 且根据 id 这个字段来进行定义
build`, 而该数据模型类定义的方法为:
1 | def resolve_by_id(self): |
DAO 层的 get_by_id 方法:
1 |
|
源码走读
查看 lotan
的 build_model
方法:
1 | def build_model(self, model_cls, **kwargs): |
前面的 if
只是简短的类型判断. 关键: find_model_by_name
这个方法, 该方法定义:
1 | # ModelManager 的类, 元类 |
__metaclass__ = SingletonMeta
表示创建 ModelManager
这个类对象时会采用 SingletonMeta
类 来创建 ModelManager
类. 故, SingletonMeta
类在此处是 ModelManager
的元类。
问题所在
__init__
中初始化了 名为_models_map
的 dict
, 从 .get()
方法基本可以确定需要传入的参数是一个 dict
类型.
进而返回查看: return score
, 使用 pdb
查看该变量属性:
1 | (Pdb) type(score) |
类型明显不对. 即问题所在 return
处。将返回改为 dict(score)
即可。
1 | (Pdb) dict(score) |
参考资料
PDB
具体用法, https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/index.html
Python
元类, http://blog.jobbole.com/21351/
版权声明:
本文由Lomo创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,
转载请注明作者及出处,本文作者为Lomo,本文标题为python pdb.