Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime.datetime.now()返回旧值_Python_Google App Engine_Datetime_Google Cloud Datastore - Fatal编程技术网

Python datetime.datetime.now()返回旧值

Python datetime.datetime.now()返回旧值,python,google-app-engine,datetime,google-cloud-datastore,Python,Google App Engine,Datetime,Google Cloud Datastore,我通过匹配日期在python中查找数据存储条目。我想要的是每天挑选“今天”的条目。但由于某种原因,当我将代码上传到gae服务器时,它只工作一天,第二天仍然返回相同的值 e、 g.当我上传代码并在2014年1月7日执行时,它返回2014年1月7日的值,但第二天在2014年1月8日,它仍然返回2014年1月7日的值 如果我重新部署相同的代码并再次执行,它将转到2014年1月8日,但第二天将再次失败 在我的开发环境中,它运行良好 为什么??谢谢你的帮助 class ClosingValueHandle

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

e、 g.当我上传代码并在2014年1月7日执行时,它返回2014年1月7日的值,但第二天在2014年1月8日,它仍然返回2014年1月7日的值

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

在我的开发环境中,它运行良好

为什么??谢谢你的帮助

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


它似乎只在应用程序部署时获取日期时间。将_date=datetime.datetime.now().date()从定义中移到函数体中,然后查看这是否有效

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

看看这是否会改变你的结果。这通常发生在您在函数外部设置值时,因为在应用程序重新启动之前,不会再次调用该函数

正如@blackbullet4749所提到的,正是这段代码给您带来了问题:

def sct(from_date=datetime.datetime.now().date()):
    value = getValueByDate(from_date)
具体来说,每次调用函数时,您都希望此代码运行
datetime.datetime.now().date()

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

要亲自看到这一点,请尝试以下方法:

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

print sct.func_defaults
无论在打印出来的元组中看到什么,都是“from_date”值,该值在代码中不断重复使用

如果希望能够以默认行为调用函数,即该函数占用当前时间,但具有覆盖选项,请改为执行以下操作:

def sct(from_date=None):
    if from_date is None:
        from_date = datetime.datetime.now().date()
    value = getValueByDate(from_date)
有关默认参数值的更多详细信息,请参见


顺便说一句,不知道这个函数应该做什么。似乎没有返回任何内容。

这里的问题是您在部署.now()并将其存储在变量中时只调用一次,然后只是重用该变量,而不是在每次添加值时调用它?…我想我在这里遗漏了一个细节,因为我是作为另一个方法的一部分调用它的。所以我编辑了我的问题。你认为呢?我认为这与“sct”的方法声明不同,它应该总是创建一个新的时间戳实例。我这样做了,明天将检查这是否有效。干杯非常感谢您的详细解释!到目前为止,将时间戳创建移到mehtod主体中解决了我的问题。我将默认值添加到方法声明中的原因是,我希望能够在其他日期调用该方法,这在目前并不必要,但将来可能会再次出现。顺便说一句,我确实删掉了这篇文章的方法,因为它很长……只是想澄清一下,如果在我的上一个示例中遵循
def sct(from_date=None)
模式,
sct
将接受不同的日期作为可选参数。然后,
from\u date
将不会是
None
所以
datetime.datetime.now().date()
将不会被调用。因此,您可以采用两种方式,将当前日期作为默认日期,并接受另一个日期作为选项。
def sct(from_date=None):
    if from_date is None:
        from_date = datetime.datetime.now().date()
    value = getValueByDate(from_date)