我有一个在Python2中通过,在Python3中失败的测试,我正在尝试找出原因。测试在以下行处失败:
我有一个在Python2中通过,在Python3中失败的测试,我正在尝试找出原因。测试在以下行处失败:
self._timeseries[0].resource.__dict__
遇到以下错误:
AttributeError: 'Resource' object has no attribute '__dict__'
如果我在调试测试时,在调试器中打印对象,我可以看到以下内容:
(Pdb) p self._timeseries[0].resource.__dict__
OrderedDict([('type', 'type_value'), ('labels', {'label1': 'value1', 'label2': 'value2', 'label3': 'value3'})])
如果我在Python3调试器中执行相同的操作,将得到以下结果:
(Pdb) p self._timeseries[0].resource.__dict__
*** AttributeError: 'Resource' object has no attribute '__dict__'
你有什么想法是为什么会发生这种情况吗?如果我在调试器中打印它而不使用.__dict__
,对象看起来完全相同,为什么Python3会失败?
__slots__
对象?如果没有看到类定义和更多信息,就很难确定。 - anthony sottile.__slots__
只返回()
。 - yelsayedself.timeseries[0].resource
到底应该是什么?当我在 Python 2 和 3 中检查任意对象的__dict__
时,我得到的是一个dict
类型的对象,而不是OrderedDict
类型的对象。我的猜测是,在 Python 3 中,你用 Python 2 的方式设置resource
为OrderedDict
类型的__dict__
属性的方法不起作用。 - Right leg__dict__
是一个OrderedDict
。你的Python 2测试是否导入了collections
,而你的Python 3测试忘记导入了它? - Right leg