5

ここで何が起きてるの?

これは予想されます:

>>> datetime.min - timedelta(days=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: date value out of range

予期しない:

>>> datetime.min - timedelta(days=2)
datetime.datetime(1, 0, 255, 0, 0)

>>> datetime.min > (datetime.min - timedelta(days=2))
True

Pythonでは、datetime.minから減算すると、これらの値は何を意味しますか?それらはどのような日付を表していますか?一部のケースでOverflowErrorがトリガーされないのはなぜですか?

4

1 に答える 1

2

Python 2.6以降にアップグレードする必要があるため、このバグは修正されました。

$ python2.5 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
0001-00-255 00:00:00
$ python2.6 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OverflowError: date value out of range
$ python2.7 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OverflowError: date value out of range
$ python3.3 -c 'import datetime; print(datetime.datetime.min - datetime.timedelta(days=2))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OverflowError: date value out of range

バグ番号、パッチ、およびpython-devの議論を追跡する誰かが必要ですか、それともそれで十分な情報がありますか?

于 2012-11-01T23:04:33.530 に答える