wil*_*lli 7 python google-app-engine
我正在使用Python在Google App Engine上运行一个小应用程序.在模型中,我有一个DateTimeProperty类型的属性,它是datetime.datetime.当它被创建时没有值(即"无").我想比较,如果datetime.datetime是None,但我不能.
if object.updated_date is None or object.updated_date >= past:
object.updated_date = now
Run Code Online (Sandbox Code Playgroud)
这两个updated_date和past是datetime.datetime.
我收到以下错误.
TypeError:无法将datetime.datetime与NoneType进行比较
这样做的正确方法是什么?
也许你的意思是:
if object.updated_date and object.updated_date >= past:
Run Code Online (Sandbox Code Playgroud)
如果它是真实的(这意味着不为空),我们检查它也 > =过去.这使用短路评估,这意味着如果第一个是假的,则不检查第二个条件.
鉴于前面的讨论似乎确定了任何一个变量都可以None,一种方法是(假设您想要设置object.updated_date任何一个变量None):
if None in (past, object.updated_date) or object.updated_date >= past:
object.updated_date = now
Run Code Online (Sandbox Code Playgroud)
重点是检查None in (past, object.updated_date)可能比语义上等效的替代方案(past is None or object.update_date is None)更容易(可以说是ε更具可读性,这要归功于其更好的紧凑性,但它当然是一种有争议的风格问题).
顺便说一句,还有一个不那么有争议的风格问题;-),我强烈建议不要使用内置插件的名称作为你自己的变量(和函数等)的名称 - 这object是一个内置的名称,在这里上下文显然是用于您自己的目的.obj相反,使用更简洁,仍然可读(可以说更多;-),并没有缺点.你不可能在任何特定的情况下通过你自己的"阴影"内置插件的名称来实现"咬",但最终会发生(因为你在某些时候碰巧需要阴影名称的正常含义)以后的普通维护操作)你可能会遇到混乱的调试情况; 同时,你可能会混淆其他读者/维护者...
我意识到很多Python的内置插件的名字是一个'有吸引力滋扰’在这个意义上说... file,object,list,dict,set,min,max...为'文件’,'对象’,"列表中的所有明显的吸引力名`等等但是,学会抵制这种特殊的诱惑是值得的! - )
你想要and,没有or。
您可能还想使用is None.
编辑:
既然你已经确定那object.updated_date 不是 None,那么唯一的另一种可能性就是那past 是 None。
| 归档时间: |
|
| 查看次数: |
26038 次 |
| 最近记录: |