0

在调试来自 datetime.date 的看似不稳定的行为时,我得到了这个完全荒谬的会话

这是成绩单(添加了一些#comments)。不幸的是,我没有设法找到我如何达到我的“d”值的重现(它是通过随机生成的日期/数字的大量聚合获得的)

>>> d
[datetime.date(2027, 1, 1), datetime.date(2013, 3, 26)]
>>> d2 = [datetime.date(2027, 1, 1), datetime.date(2013, 3, 26)]
>>> d == d2                      # ok so no misunderstanding
True
>>> min(d)
datetime.date(2027, 1, 1)        # ???
>>> min(d2)
datetime.date(2013, 3, 26)       # fine
>>> max(d)
datetime.date(2013, 3, 26)       # ?!?
>>> max(d2)
datetime.date(2027, 1, 1)        # fine

我知道我问了很多,但任何人都可以阐明这种荒谬情况的可能来源吗?我尝试重新启动我的编辑器(Eric),它可能与调试器有关,但是当我在没有调试器的情况下运行时,我通常遇到的问题(即一些奇怪的数字)也会发生。

4

1 回答 1

1

嗯……我傻了。问题是我对 datetime.date 进行了子类化,因此 d 中的对象实际上就是那个子类。现在我需要弄清楚为什么比较仍然会产生平等。

这里的要点是,我认为如果没有复制,我可以使用“pickle”并导出我的变量供其他人检查。当我这样做时,我发现我的子类正在被使用。

这就是我所做的:

>>> import pickle
>>> pickle dumps([d,d2])
>>> # some stuff showing the library/subclass

很抱歉给您带来麻烦-希望您不会为此投票反对我!

于 2012-06-27T19:00:04.907 回答