我用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_date
和past
都是datetime.datetime。
我得到以下错误。
TypeError: can't compare datetime.datetime to NoneType
正确的方法是什么?
你想要的是
and
,而不是or
。您还可以使用
is None
。编辑:
既然你已经确定
object.updated_date
不是None
,这唯一的另一种可能性是past
是None
。鉴于前面的讨论似乎已经确定了变量可以是
None
,一种方法是(假设您希望在变量为None
时设置object.updated_date
):要点是,check
None in (past, object.updated_date)
可能比语义上等价的替代方法(past is None or object.update_date is None)
更容易理解(可以说,epsilon由于其更好的紧凑性而更容易阅读,但它当然是一个有争议的风格问题)。作为一个旁白,也是一个不太容易讨论的风格问题;-,我强烈建议不要使用内置的名称作为您自己变量(和函数等)的名称-
object
就是这样一个内置的名称,在这个上下文中,它显然是用于您自己的目的。相反,使用obj
更简洁、更可读(可以说更容易理解,-),并且没有缺点。在任何情况下,你都不太可能被用你自己的名字来“隐藏”内置名称的不可靠做法“咬”到,但最终它会发生(因为你在以后的一些普通维护操作中碰巧需要隐藏名称的正常含义),你可能会陷入一个混乱的调试情况;同时,你可能会混淆其他读者/维护人员。。。也没有任何优势来弥补这些劣势。我意识到Python的许多内置名称在这个意义上是一个“诱人的麻烦”。。。
file
,object
,list
,dict
,set
,min
,max
。。。所有的名字显然都很吸引人,比如“一个文件”、“一个对象”、“一个列表”等等。但是,要学会抵制这种特殊的诱惑是值得的!-)也许你的意思是:
如果它是truthy(这意味着不为空),我们检查它是否也是>;=过去。这使用短路评估,这意味着如果第一个条件是错误的,则不会检查第二个条件。
相关问题 更多 >
编程相关推荐