gpt4 book ai didi

python - 无限递归向从 UTC 创建的 SimpleDate python 对象添加天数

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:17 25 4
gpt4 key购买 nike

我正在使用 python 库 simple-date。我通过使用表示 UTC 日期的字符串进行初始化来创建了一个 SimpleDate 对象。当我尝试使用 timedelta 添加天数时,它似乎工作正常,但当我尝试打印它时,它会无限递归。我检查了在调试器中添加 p 所产生的对象,但它什么也没显示。类型是 SimpleDate 但不知怎的它似乎是空的。如果我不使用 UTC 字符串,它就可以正常工作。

我做错了什么吗?

我的代码:

from simpledate import SimpleDate
from datetime import timedelta

# This works
day = '2016-06-01 00:00:00'
later = SimpleDate(day) + timedelta(days=10)
print(later)

# This works
day = '2016-06-01 00:00:00'
later = SimpleDate(day) + timedelta(days=10)
print(later)

# The print statement will cause infinite recursion
day = '2016-06-01 00:00:00'
later = SimpleDate(day, tz='UTC') + timedelta(days=10)
print(later)

# The print statement will cause infinite recursion
day = '2016-06-01 00:00:00UTC'
later = SimpleDate(day) + timedelta(days=10)
print(later)

最佳答案

所以,这里有两个问题。

第一个很容易解释。为某个错误生成消息会导致它尝试报告的相同错误。这导致生成一条新消息,从而导致一个新错误,最终耗尽了堆栈。现在这个问题已经解决了。

第二个更难解释,因为时区很复杂。所以我首先举一个更容易理解的例子。考虑 PDT(太平洋夏令时间)中的这个日期:

>>> SimpleDate('2016-08-28', tz='PDT')SimpleDate('2016-08-28')

如果再加上 6 个月,我们将进入隆冬。那时 PDT 根本不存在(现在是冬天)!所以我们得到一个错误:

>>> SimpleDate('2016-08-28', tz='PDT') + timedelta(days=180)simpledate.SingleInstantTzError: Attempted to use PDT, defined only for 2016-08-28 07:00:00+00:00

现在您可能会说 SimpleDate 应该足够聪明,可以知道 PDT 何时结束。但事实并非如此(据我所知,它只是没有可用的数据,但我可能是错的)。相反,SimpleDate 拒绝修改与有效性有限的时区关联的日期。这就是“单一瞬间”的含义。

有关此内容的更多信息,请参阅 the documentation .

但在本例中,时区是 UTC!我们知道这始终有效。因此我添加了一个特殊情况,可以在解析 UTC 时避免此限制:

>>> SimpleDate('2016-08-28', tz='UTC') + timedelta(days=180)SimpleDate('2017-02-24', tz='UTC')

现在 PyPI 中的版本为 0.5.0。抱歉耽搁了 - 一些测试失败了,我发现了一个新的错误,所以我需要做一些额外的工作。

关于python - 无限递归向从 UTC 创建的 SimpleDate python 对象添加天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com