比较datetime.datetime是否存在

2024-03-29 14:08:31 发布

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

我用Python在Google app Engine上运行一个小应用。 在模型中,我有一个DateTimeProperty类型的属性,它是datetime.datetime。当它被创建时,没有值(即“无”)。 如果datetime.datetime不是,我想比较一下,但我不能

if object.updated_date is None or object.updated_date >= past:
  object.updated_date = now

updated_datepast都是datetime.datetime。

我得到以下错误。

TypeError: can't compare datetime.datetime to NoneType

正确的方法是什么?


Tags: 模型noneapp类型datetimedateif属性
3条回答

你想要的是and,而不是or

您还可以使用is None

编辑:

既然你已经确定object.updated_date不是None,这唯一的另一种可能性是pastNone

鉴于前面的讨论似乎已经确定了变量可以是None,一种方法是(假设您希望在变量为None时设置object.updated_date):

if None in (past, object.updated_date) or object.updated_date >= past:
  object.updated_date = now

要点是,check None in (past, object.updated_date)可能比语义上等价的替代方法(past is None or object.update_date is None)更容易理解(可以说,epsilon由于其更好的紧凑性而更容易阅读,但它当然是一个有争议的风格问题)。

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

我意识到Python的许多内置名称在这个意义上是一个“诱人的麻烦”。。。fileobjectlistdictsetminmax。。。所有的名字显然都很吸引人,比如“一个文件”、“一个对象”、“一个列表”等等。但是,要学会抵制这种特殊的诱惑是值得的!-)

也许你的意思是:

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

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

相关问题 更多 >