如何强制“is not None”测试

Max*_*rin 5 python

我有一个Python API,它可以返回一个对象,或者None如果没有找到对象。我想避免运行时异常/崩溃等,因此我想强制我的 API 的用户进行测试is not None

例如:

x = getObject(...)
if x is not None:
   print x.getName()  #should be o.k.


y = getObject(...)
print y.getName() # print an error to the log
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

在 C++ 中的类似代码中,我可以添加一个标志,当我调用getName();时将检查该标志。该标志仅在将对象与 进行比较时设置NULL

然而,在 Python 中,我无法重载该is运算符。还有其他方法可以在 Python 中实现该功能吗?

Sha*_*ank 4

您不能强制使用 ,if x is not None因为您无法覆盖 的行为id()。该is运算符在内部比较两个被比较对象的 id,并且您无法控制该行为。

但是,您可以通过分别重写类的和方法来强制使用if x != None或。if not x == None__eq____ne__

然而,这不是一个好的做法。正如 @Kevin 在评论中指出的那样,is是与 进行比较时首选使用的运算符None

我要做的就是为这个 API 编写清晰且有组织的文档,然后明确警告用户实例化可能会失败并返回None. 然后,通过提供内置getattr函数的示例或带有检查的示例,轻轻地推动用户采用良好实践is not None