如何避免python中的yield命令每次抛出异常?

时间:2016-06-07 17:44:29

标签: python twisted klein-mvc

我正在使用Twisted Klein开发异步Web服务。部分代码如下:

@inlineCallbacks
def test(input1): 
    try:
        result = yield function(input1)
        print result
        returnValue(result)
    except:
        returnValue("None")
        pass

我将此test函数作为我的Web服务的一部分,每次从其他函数调用test函数返回“None”时。但是,在服务器屏幕上,它会打印出我想要的正确结果(正确执行try中的print result行,而不使用returnValue(result)。我对异步编码不是很熟悉,但除了和yield之外,还有什么我应该小心的吗?感谢。

1 个答案:

答案 0 :(得分:2)

首先,你永远不应该有一个裸except条款。 (有例外,但一般来说,抓住特定错误会更好。)

其次,来自returnValue上的扭曲文档:

  

注意:目前通过引发从BaseException派生的异常来实现。您可能想要更改任何'除了:'除了例外情况之外的条款:'条款,以免捕获此异常。

     

另外:虽然从生成器内部调用的任意函数中调用此函数时,此函数当前有效,但不要依赖此行为。

正在发生的正确结果是打印,然后您拨打returnValue,这会引发异常,导致您的代码返回None

twisted docs