从方法返回元组

时间:2011-02-02 11:02:25

标签: python

我正在编写一个方法,该方法在成功时返回元组,但在失败时返回None。我还没有最终确定None(作为失败案件的回复),但这是其中一个选择。我们可以针对失败案件返回-1,-1吗?我正在寻找最好的pythonic方法来实现这一点,以便拆包很容易。

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

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

     return x,y

2 个答案:

答案 0 :(得分:14)

如果出现故障,为什么不提出异常?

你当然可以将(-1,-1)作为失败返回,但在我看来这不是一个好的解决方案。

请记住,在Python中,EAFP(比请求更容易请求宽恕)比LBYL更受青睐(在你跳跃之前看看)。

这意味着,只要在所有工作都有效的假设下编写代码,然后捕获适当的异常就更好了。

您的代码可能会变成

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

     return x,y

我会通过以下方式改进您的代码:

  • make self.validate()在结果不为正时返回0,以便您可以以更加pythonic的方式更改第二行:

     if not self.validate():
    
  • 通过将return语句更改为:

    来删除中间x, y变量
     return self.getXY()
    

最后,您可以在getXY()中引发异常,并在代码中直接使用此方法。

答案 1 :(得分:3)

如果这是为了捕获编程错误,那么断言更清晰。

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()自己引发验证错误:这将允许提供一条消息,提供验证错误的原因。