gpt4 book ai didi

python - 如何在 Twisted 中调试 Protocol.dataReceived

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:48 25 4
gpt4 key购买 nike

我是twisted新手,在dataReceived内调试我的代码时遇到困难。 twisted.internet.protocol.Protocol的方法对象。

给出一些像这样的代码

class Printer(Protocol):
def dataReceived(self, data):
print data # Works perfectly
print toto # should trigger some error since "toto" is not defined
...
response.deliverBody(Printer())

我找不到添加 Errback 的方法上dataReceived 。有办法吗?另一种调试其行为的方法?

预先感谢您的帮助。

最佳答案

您无法直接从 dataReceived 捕获错误,因为该函数通常不受 deferred 用户控制。您只能对 deferred 对象调用 addErrback。以下是如何捕获错误的示例:

from twisted.internet.protocol import Protocol
from twisted.internet.defer import Deferred

class Printer(Protocol):
def dataReceived(self, data):
d = Deferred()
d.addCallback(self.display_data)
d.addErrback(self.error_func)
d.callback(data)

def display_data(self, data):
print(data)
print(toto) # this will raise NameError error

def error_func(self, error):
print('[!] Whoops here is the error: {0}'.format(error))

dataReceived 函数中创建一个 deferred,它将打印 data 和无效的 toto 变量。链接错误返回函数(即 self.error_func())来捕获 display_data() 中发生的错误。您应该努力避免 dataReceived 函数本身出现错误。这并不总是可行,但应该尝试一下。希望这有帮助

关于python - 如何在 Twisted 中调试 Protocol.dataReceived,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com