我是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 函数本身出现错误。这并不总是可行,但应该尝试一下。希望这有帮助
我是一名优秀的程序员,十分优秀!