从方法返回元组

2024-10-04 13:16:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个方法,该方法在成功时返回元组,但在失败时返回None。我还没有完成None(作为失败案例返回),但这是一个选择。我们可以返回失败案例的-1,-1吗?我正在寻找最好的Python方法来实现这一点,以便拆箱是容易的。

请告诉我如何改进它。伪代码如下

 def myFunc(self):
     if self.validate() != 0:
         return
     x,y = self.getXY()

     return x,y

Tags: 方法代码selfnonereturnifdefmyfunc
2条回答

如果失败了,你为什么不提出一个例外呢?

你当然可以以失败的形式返回(-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()中引发异常,并在代码中直接使用此方法。

如果这是为了捕获编程错误,那么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()本身引发验证错误:例如,这将允许提供一条消息,说明验证错误的原因。

相关问题 更多 >