2

異なる Python バージョン (2.5 と 2.6) および異なるプラットフォーム (FreeBSD と Mac OS) で doctest を実行すると、文字列の引用符が異なります。

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')) の結果は 'Decimal("5.00")' になり、もう一方のボックスでは "Decimal('5.00')" になります。より複雑なテスト ロジックを作成せずに問題を回避する方法はありますか?

4

2 に答える 2

4

これは実際には、decimalモジュールのソース コードが変更されたためdecimal.Decimal.__repr__です。

return 'Decimal("%s")' % str(self)

一方、python2.6 では以下が含まれます。

return "Decimal('%s')" % str(self)

したがって、この場合の最善の方法str()は、結果を印刷して、必要に応じてタイプを個別に確認することです...

于 2009-08-10T10:49:29.683 に答える
0

D avid Fraserによるヒットに続いて、Python メーリングリストで Raymond Hettinger によるこの提案を見つけました。

私は今、次のようなものを使用しています:

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)
于 2009-08-10T11:51:13.273 に答える