当我在不同的Python版本(2.5 vs 2.6)和不同的平台(FreeBSD vs Mac OS)上运行doctests时,字符串的引用方式不同:
Failed example:
decode('{"created_by":"test","guid":123,"num":5.00}')
Expected:
{'guid': 123, 'num': Decimal("5.00"), 'created_by': 'test'}
Got:
{'guid': 123, 'num': Decimal('5.00'), 'created_by': 'test'}
所以在一个方框上,repr(decimal.Decimal('5.00'))在“十进制('5.00')”中导致另一个'十进制(“5.00”)'。有没有办法解决这个问题,而不是创建更多的合并测试逻辑?
答案 0 :(得分:4)
这实际上是因为decimal
模块的源代码发生了变化:在python 2.4和python2.5中,decimal.Decimal.__repr__
函数包含:
return 'Decimal("%s")' % str(self)
而在python2.6中它包含:
return "Decimal('%s')" % str(self)
所以在这种情况下,最好的办法就是打印出str()
的结果,并在必要时单独检查类型......
答案 1 :(得分:0)
在D avid Fraser点击之后,我在Python邮件列表中找到了Raymond Hettinger的this suggestion。
我现在使用这样的东西:
import sys
if sys.version_info[:2] <= (2, 5):
# ugly monkeypatch to make doctests work. For the reasons see
# See http://mail.python.org/pipermail/python-dev/2008-July/081420.html
# It can go away once all our boxes run python > 2.5
decimal.Decimal.__repr__ = lambda s: "Decimal('%s')" % str(s)