擅长:python、mysql、java
<p>尽管我很喜欢用特定类型的异常处理这两种情况,但我将提供一种不同的方法,以防有帮助:回调。在</p>
<p>如果您已经使用了Twisted这样的异步框架,那么回调的效果会更好,但这并不是它们唯一的地方。因此,您可能有一个方法,为每个结果取一个函数,如下所示:</p>
<pre><code>def do_request(on_success, on_interaction_needed, on_failure):
"""
Submits the swoosh request, and awaits a response.
If no user interaction is needed, calls on_success with a
httplib.HTTPResponse object.
If user interaction is needed, on_interaction_needed is
called with a single string parameter.
If the request failed, a ValueError is passed to on_failure
"""
response = sumbit_request()
if response.is_fine():
on_success(response)
elif response.is_partial()
on_interaction_needed(response.message)
else:
on_failure(ValueError(response.message))
</code></pre>
<p>作为Python,有很多方法可以做到这一点。您可能不喜欢将异常传递给函数,所以您可能只需要对用户输入场景进行回调。另外,您可以将回调传递给<code>Swoosh</code>初始化器。在</p>
<p>但这也有缺点,例如:</p>
<ul>
<li>粗心可能会导致通心粉代码</li>
<li>允许调用者向函数注入逻辑(例如,在回调中引发的异常将从<code>Swoosh</code>传播出去)</li>
<li>我这里的例子很简单,你的实际函数可能不是</li>
</ul>
<p>像往常一样,仔细考虑和良好的文档应该避免这些问题。理论上。在</p>