在设计Python API时,抛出异常或返回false/None等更加Pythonic吗?

Joa*_*nge 6 python api class-design exception

我使用的是基于Python API那里有很多的功能来查询的东西,比如doesPointExist,findPoint,canCreateNewPoint,等在那里的阴性结果会抛出异常.这使代码更加混乱,填充了try/catch语句,而不是直接将结果用作布尔值.

由于我不是Python专家,我想知道这个设计是否是Pythonic?我没有在标准库中看到过这种设计,所以我假设P​​ython API中的这种异常使用是不受欢迎的?

Sim*_*ser 6

听起来像一个设计糟糕的API.

  • 该函数doesPointExist应该返回,True或者False当该点不存在时不应引发异常.
  • 该函数findPoint应该返回一个Point对象,或者None什么时候找不到对象.
  • 该函数canCreateNewPoint应返回TrueFalse出于类似的原因.

例外情况适用于特殊情况.


che*_*ner 6

API设计有点艺术性.函数的名称应该表明它的行为方式,包括设置用户期望.名为函数findPoint意味着搜索可能失败,因此不存在这样的点的情况不例外,并且可以返回None以发信号通知结果.getPoint但是,一个名为的函数会向我暗示它总能返回请求的点.失败将是意料之外的,并且需要提出异常.