日期时间。日期时间。现在()返回旧值

2024-09-28 20:55:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过匹配日期在python中查找数据存储条目。我想要的是每天选一个“今天”的条目。但由于某些原因,当我把代码上传到gae服务器时,它只工作一天,第二天它仍然返回相同的值。在

例如,当我上传代码并在2014年1月7日执行时,它返回的值是2014年1月7日,但第二天2014年1月8日,它仍然返回2014年7月1日。在

如果我重新部署相同的代码并再次执行它,它将继续运行到2014年1月8日,但第二天将再次失败。在

在我的开发环境中它工作得很好。。。在

为什么?谢谢你的帮助!在

class ClosingValueHandler(webapp2.RequestHandler):
    def get(self):
        sct()

(…)

^{pr2}$

Tags: 数据代码selfget环境def条目原因
2条回答

正如@blackbullet4749所提到的,正是这段代码导致了您的问题:

def sct(from_date=datetime.datetime.now().date()):
    value = getValueByDate(from_date)

具体来说,您希望每次调用函数时都运行datetime.datetime.now().date()。在

实际发生的情况是,datetime.datetime.now().date()只运行一次,而不是在函数被调用时,而是在它第一次被定义时——也就是说,当函数对象被实例化时。在执行代码时,Python实际上运行这些代码行,并创建一个与其他对象一样存在的函数对象。默认参数位于指定为函数对象属性的元组中。在

要亲自查看,请尝试以下操作:

^{pr2}$

在打印出来的元组中看到的是“from_date”值,它在代码中一直被重用。在

如果您希望能够在默认行为为占用当前时间的情况下调用函数,但可以选择重写,请改为执行以下操作:

def sct(from_date=None):
    if from_date is None:
        from_date = datetime.datetime.now().date()
    value = getValueByDate(from_date)

有关默认参数值的详细信息,请参见effbot post。在

顺便说一句,不知道这个函数应该做什么。似乎什么也不回。在

它似乎只获取应用程序部署时的日期时间。移动起始日期=日期时间。日期时间。现在().date()从定义中跳出到函数体中,然后查看它是否有效。在

def sct(self):
    from_date=datetime.datetime.now().date()
    value = getValueByDate(from_date)

看看这是否会改变你的结果。当你在函数外设置一个值时,通常会发生这种情况,因为在应用程序重新启动之前,它永远不会被调用。在

相关问题 更多 >