Python 比较datetime.datetime是否存在

Python 比较datetime.datetime是否存在,python,google-app-engine,Python,Google App Engine,我正在用Python在Google应用程序引擎上运行一个小应用程序。 在模型中,我有一个DateTimeProperty类型的属性,即datetime.datetime。创建时没有价值(即“无”)。 我想比较一下datetime.datetime是否为无,但我不能 if object.updated_date is None or object.updated_date >= past: object.updated_date = now updated_date和pass都是dat

我正在用Python在Google应用程序引擎上运行一个小应用程序。 在模型中,我有一个DateTimeProperty类型的属性,即datetime.datetime。创建时没有价值(即“无”)。 我想比较一下datetime.datetime是否为无,但我不能

if object.updated_date is None or object.updated_date >= past:
  object.updated_date = now
updated_date
pass
都是datetime.datetime

我得到以下错误

TypeError:无法将datetime.datetime与非类型进行比较


正确的方法是什么?

您想要的是
,而不是

您可能还想使用
is None

编辑:

既然您已经确定
object.updated\u date
不是
None
,那么唯一的可能性是
过去的
None
也许您的意思是:

if object.updated_date and object.updated_date >= past:

如果它是truthy(这意味着不为null),我们检查它是否也>=过去。这使用短路评估,这意味着如果第一个条件是错误的,则不检查第二个条件。

鉴于前面的讨论似乎已确定任一变量可能是
None
,一种方法是(假设您要设置
对象。当任一变量为
无时,更新的\u date
):

要点是,检查
None in(过去,object.updated\u date)
可能比语义上等价的替代方法
(过去是None或object.update\u date是None)
(由于其更好的紧凑性,可以说是一个易读的ε,但这当然是一个有争议的风格问题)

作为一个旁白,也是一个不太有争议的风格问题;-),我强烈建议不要使用内置名称作为您自己变量(和函数等)的名称--
object
就是这样一个内置名称,在本文中,它显然是用于您自己的目的。相反,使用
obj
更简洁、可读性更好(可以说更容易理解;-),并且没有任何缺点。在任何特定情况下,您都不太可能被用自己的名称“隐藏”内置名称的不确定做法“咬”到,但最终会发生这种情况(因为您在以后的一些普通维护操作中碰巧需要隐藏名称的正常含义),并且您可能会遇到令人困惑的调试情况;同时,您可能会混淆其他读者/维护人员。。。而这些劣势绝对没有得到任何好处


我意识到Python的许多内置名称在这个意义上是一个“吸引人的讨厌的东西”<代码>文件
对象
列表
目录
设置
最小值
最大值
。。。所有明显吸引人的名字都是“一个文件”,“一个对象”,“一张清单”,等等。但是,学会抵制这种特殊的诱惑是值得的

它不检查空值,它检查假值。这将捕获
None
,但也将捕获一些非
None
值。True,@Ignacio。我现在已经澄清了。如果这两个都是
datetime.datetime
的实例,那么您不可能在那一行中得到该错误。
if None in (past, object.updated_date) or object.updated_date >= past:
  object.updated_date = now