1

relativedeltaオブジェクトを増やしても安全ですか? 奇妙で一貫性のない動作が見られます。また、このクラスでサポートされている演算の種類が文書化されているのを見つけることができません (存在する場合)。

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta
>>> datetime.now() + relativedelta(days=2)
datetime.datetime(2014, 5, 30, 12, 24, 59, 173941)
>>> datetime.now() + relativedelta(days=1) * 2
# TypeError: integer argument expected, got float

一方で:

>>> relativedelta(days=2) == relativedelta(days=1) * 2
True

完全なトレースバック ( python2.7.5 およびdateutil1.5 を使用):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/dateutil/relativedelta.py", line 261, in __radd__
    day = min(calendar.monthrange(year, month)[1],
  File "/usr/lib/python2.7/calendar.py", line 121, in monthrange
    day1 = weekday(year, month, 1)
  File "/usr/lib/python2.7/calendar.py", line 113, in weekday
    return datetime.date(year, month, day).weekday()
TypeError: integer argument expected, got float
4

1 に答える 1

4

の乗算の処理で既知のバグに遭遇しrelativedeltaましたが、修正されました。これは Python 2.7 以降にのみ影響します (特定の関数の呼び出しシグネチャが強化されました)。

python-dateutilsパッケージをバージョン 2.1 以降にアップグレードします。

プロジェクトのドキュメントにある 2.0 は Python 3 のみであるという誤った情報に惑わされないでください。2.1 と 2.2 は Python 2 と 3 の相互互換性があります。

于 2014-05-28T12:44:40.303 に答える