2024-10-04 13:16:59 发布
网友
我正在编写一个方法,该方法在成功时返回元组,但在失败时返回None。我还没有完成None(作为失败案例返回),但这是一个选择。我们可以返回失败案例的-1,-1吗?我正在寻找最好的Python方法来实现这一点,以便拆箱是容易的。
None
-1,-1
请告诉我如何改进它。伪代码如下
def myFunc(self): if self.validate() != 0: return x,y = self.getXY() return x,y
如果失败了,你为什么不提出一个例外呢?
你当然可以以失败的形式返回(-1,-1),但在我看来这不是一个好的解决方案。
记住,在Python中,EAFP(请求宽恕比请求许可更容易)比LBYL(三思而后行)更受欢迎。
这意味着,最好在假设所有代码都工作的情况下编写代码,然后捕获适当的异常。
你的代码会变成
def myFunc(self): if self.validate() != 0: raise CustomNotValidatedException() x,y = self.getXY() return x,y
我将通过以下方式改进您的代码:
当结果不为正时,使self.validate()返回0,这样您就可以更像Python一样更改第二行:
if not self.validate():
通过将return语句更改为:
return self.getXY()
最后,您可以在getXY()中引发异常,并在代码中直接使用此方法。
getXY()
如果这是为了捕获编程错误,那么assert更干净。
def my_function(self): assert self.validate() return self.x, self.y
如果要捕获运行时错误(可能是用户提供的数据),那么异常更好。
def my_function(self): if not self.validate(): raise ValidationError return self.x, self.y
这里一个很好的替代方法是self.validate()本身引发验证错误:例如,这将允许提供一条消息,说明验证错误的原因。
如果失败了,你为什么不提出一个例外呢?
你当然可以以失败的形式返回(-1,-1),但在我看来这不是一个好的解决方案。
记住,在Python中,EAFP(请求宽恕比请求许可更容易)比LBYL(三思而后行)更受欢迎。
这意味着,最好在假设所有代码都工作的情况下编写代码,然后捕获适当的异常。
你的代码会变成
我将通过以下方式改进您的代码:
当结果不为正时,使self.validate()返回0,这样您就可以更像Python一样更改第二行:
通过将return语句更改为:
最后,您可以在
getXY()
中引发异常,并在代码中直接使用此方法。如果这是为了捕获编程错误,那么assert更干净。
如果要捕获运行时错误(可能是用户提供的数据),那么异常更好。
这里一个很好的替代方法是self.validate()本身引发验证错误:例如,这将允许提供一条消息,说明验证错误的原因。
相关问题 更多 >
编程相关推荐