我刚开始扭曲,我无法在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
的方法。有办法吗?调试其行为的另一种方法是什么?
提前感谢您的帮助。
答案 0 :(得分:1)
您无法直接从dataReceived
抓取错误,因为该功能不是deferred
用户通常可以控制的。您只能在addErrback
个对象上调用deferred
。以下是如何捕获错误的示例:
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))
在deferred
函数中创建了dataReceived
,该函数将打印data
和无效的toto
变量。将错误回送函数(即self.error_func()
)链接起来以捕获display_data()
中发生的错误。你应该努力在dataReceived函数本身没有错误。这并不总是可行,但应该尝试。希望这有帮助