我想这是个结构设计问题。回来寻求建议。在
首先,我在写一个模块。因此,尽可能让潜在的开发人员使用它。在
在一个对象内(我们称之为Swoosh
)我有一个方法,当被调用时,它可能会导致成功(返回一个新对象——为了深入了解:它是一个httplib.HTTPResponse
)或失败(令人惊讶,不是吗?)。在
我很难决定如何处理失败。这里主要有两种情况:
在(1)中,我决定用适当的描述raise ValueError()
。
在(2)中,因为我需要将str
返回给用户。。我不确定是否最好只return
一个字符串,让用户检查函数返回了什么(httplib.HTTPResponse
或{
作为开发人员,您对这样的对象/函数有什么期望?在
或者你觉得整个设计很可笑-让我知道,我很乐意学习。在
尽管我很喜欢用特定类型的异常处理这两种情况,但我将提供一种不同的方法,以防有帮助:回调。在
如果您已经使用了Twisted这样的异步框架,那么回调的效果会更好,但这并不是它们唯一的地方。因此,您可能有一个方法,为每个结果取一个函数,如下所示:
作为Python,有很多方法可以做到这一点。您可能不喜欢将异常传递给函数,所以您可能只需要对用户输入场景进行回调。另外,您可以将回调传递给
Swoosh
初始化器。在但这也有缺点,例如:
Swoosh
传播出去)像往常一样,仔细考虑和良好的文档应该避免这些问题。理论上。在
如果用户交互情况意味着调用代码必须显示一个提示,获取一些输入,然后他们将控制权传递回您的函数,那么尝试用异常处理这个问题可能会很难看。例如
如果这种用户交互是控制流的一个正常部分,那么首先将用户交互函数传递到您的方法中可能会更简洁—然后它可以将结果返回到Swoosh代码。例如:
^{pr2}$我认为在这种情况下提出一个例外可能是个不错的主意。在Python中,由于duck类型的原因,将多个信号压缩为一个函数的单个返回值并不理想。它不是很像Python;每次你需要做的事情是:
你应该考虑它是否真的是最好的设计。在
在这种情况下,如果实现了一个自定义异常,那么调用函数的代码就可以将返回值视为
HTTPResponse
。如果函数无法返回其调用者可以以这种方式处理的任何路径,都将通过引发异常来处理。在同样,捕捉异常并用消息提示用户的代码不必担心它得到的东西的确切类型。它只知道它被显式地(由异常指示)向用户显示某些内容。在
相关问题 更多 >
编程相关推荐