如何从扭曲的inlineCallbacks装饰函数中捕获异常?

麦克

我要开始使用Twisted,因为我将要使用的库之一取决于它。在早期测试中,我对如何捕获在这样的函数中引发的异常感到困惑:

@defer.inlineCallbacks
def read_input_status(self, address, length, callback):
    assert callback
    # ...

如果callbackNone一个AssertionError被抛出,所以我想看看它...该函数的调用是这样的:

def cb():
    pass
def eb():
    pass

d = task.deferLater(reactor, 1, client.read_input_status, 0x0000, 8, None)
d.addCallback(cb)
d.addErrback(eb)

deferLater之所以在这里打电话是为了能够处理错误,因为我知道在使用`callLater'时这是不可能的。但是我的错误永远不会被调用。

奇怪的是,当尝试调试并查看扭曲的lib的代码时,我认为我已经看到了一个原因,为什么我的错误不会生效。我装饰的生成器函数(g以下自变量)由twisted的defer._inlineCallbacks实现调用如下):

def _inlineCallbacks(result, g, deferred):
    # ...
    while 1:
        try:
            # ...
            result = g.send(result)
        except:
            deferred.errback()
            return deferred

我确实在上一节中看到了我的异常弹出,然后在其中调用了延迟的错误。但是:那不是我延迟的...如果我在调试器的调用层次结构中进行一个调用,我会看到哪个延迟对象实际上传递给了_inlineCallbacks

def unwindGenerator(*args, **kwargs):
    # ...
    return _inlineCallbacks(None, gen, Deferred())

我是不是弄错了,或者这仅仅是一个空的,纯净的,没有回调/错误附加的新对象?

很抱歉,冗长的阐述。除了这篇SO帖子,我无法直接看到它如何解决我的问题,因此找不到立即相关的任何内容

非常感谢。

[更新]请查看此要点,以获取有效的示例代码(Python 2.7.6,Twisted 13.2.0)。

麦克

重新阅读有关Twisted Deferred回调和errbacks文档,便找到了答案。上面的代码以及链接的要点中的问题是缺少用于callback和errback的参数。如果我用以下代码替换上面写的内容,则异常会很好地捕获,并按预期通过errback通知:

def cb(result):
    pass
def eb(failure):
    pass

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在装饰器中捕获异常

来自分类Dev

PostgreSQL:如何在函数中捕获异常?

来自分类Dev

如何捕获已被 Python 中的嵌套函数调用捕获的异常

来自分类Dev

如何从构造函数中捕获异常而不处理整个函数?

来自分类Dev

python从装饰函数中捕获错误

来自分类Dev

python从装饰函数中捕获错误

来自分类Dev

如何在装饰器中捕获多个相同类型的异常

来自分类Dev

如何从C ++中的构造函数中捕获异常

来自分类Dev

如何捕获构造函数异常?

来自分类Dev

在构造函数中捕获异常

来自分类常见问题

如何在yield调用函数中防止或捕获StopIteration异常?

来自分类Dev

如何从成员析构函数中捕获异常

来自分类Dev

如何在构造函数中捕获异步方法的异常?

来自分类Dev

扭曲的追溯中的“ <异常捕获在这里>”行是什么意思?

来自分类Dev

在析构函数中捕获异常

来自分类Dev

从happstack中的纯函数捕获异常

来自分类Dev

C ++在构造函数中捕获异常

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

在AWS Lambda python函数中捕获异常

来自分类Dev

无法从c ++中的函数捕获异常

来自分类Dev

在 Azure 函数中捕获异步方法异常

来自分类Dev

如何捕获在C函数调用的Haskell回调函数中引发的Haskell异常?

来自分类Dev

如何使用@符号装饰python中的函数

来自分类Dev

如何在Python Azure函数中捕获Azure表引发的异常

来自分类Dev

如何从不引发异常(“ ars”)的库函数中捕获错误?

来自分类Dev

如何:捕获输入函数异常的可变参数包装函数

来自分类Dev

从构造函数中调用构造函数并捕获异常

来自分类Dev

如何捕获在JsonConverter属性中引发的异常?

来自分类Dev

如何在PowerShell中捕获异常?

Related 相关文章

热门标签

归档