вопросы цитирования строк в документах - PullRequest
2 голосов
/ 10 августа 2009

Когда я запускаю тесты документов для разных версий Python (2.5 против 2.6) и разных платформ (FreeBSD против Mac OS), строки цитируются по-разному:

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 ') ". Есть ли способ обойти проблему без создания более сложной тестовой логики?

Ответы [ 2 ]

4 голосов
/ 10 августа 2009

Это происходит потому, что исходный код модуля decimal изменился: в python 2.4 и python2.5 функция decimal.Decimal.__repr__ содержит:

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

, тогда как в python2.6 он содержит:

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

Так что в этом случае лучше всего распечатать str() результата и при необходимости проверить тип отдельно ...

0 голосов
/ 10 августа 2009

После хитов D заядлый Фрейзер я нашел это предложение Раймонда Хеттингера в списке рассылки Python.

Теперь я использую что-то вроде этого:

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)
...