سؤال

عندما أقوم بتشغيل Doctests على إصدارات Python المختلفة (2.5 مقابل 2.6) و Starts PlattForms (FreeBSD VS 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'}

لذلك في صندوق واحد قم بإعادة تيثيل (عشري.مزيدانية ("5.00")) نتائج "العشرية (" ("5.00") "من ناحية أخرى في" عشري ("5.00") ". هل هناك أي طريقة للحصول على إرث القضية مع إنشاء منطق اختبار أكثر تعقد؟

هل كانت مفيدة؟

المحلول

هذا هو في الواقع لأن decimal تم تغيير شفرة المصدر في الوحدة النمطية: في Python 2.4 و Python2.5 decimal.Decimal.__repr__ تحتوي الوظيفة على:

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

بينما في Python2.6 يحتوي على:

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

لذلك في هذه الحالة أفضل شيء يجب القيام به هو مجرد طباعة str() من النتيجة وتحقق من النوع بشكل منفصل إذا لزم الأمر ...

نصائح أخرى

بعد الزيارات من قبل دمتعطش فريزر وجدت هذا الاقتراح بواسطة Raymond Hettinger على 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top