如何在 Twisted 中调试 Protocol.dataReceived
How to debug Protocol.dataReceived in Twisted
我是 twisted 的新手,在 twisted.internet.protocol.Protocol
对象的 dataReceived
方法中调试我的代码时遇到问题。
给定一些这样的代码
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())
我找不到在 dataReceived
上添加 Errback
的方法。有办法吗?调试其行为的另一种方法?
在此先感谢您的帮助。
您无法直接从 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))
A deferred
在 dataReceived
函数中创建,它将打印 data
和无效的 toto
变量。 errorback 函数(即 self.error_func()
)被链接起来以捕获 display_data()
中发生的错误。您应该努力避免 dataReceived 函数本身出现错误。这并不总是可能的,但应该尝试一下。希望这有帮助
我是 twisted 的新手,在 twisted.internet.protocol.Protocol
对象的 dataReceived
方法中调试我的代码时遇到问题。
给定一些这样的代码
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())
我找不到在 dataReceived
上添加 Errback
的方法。有办法吗?调试其行为的另一种方法?
在此先感谢您的帮助。
您无法直接从 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))
A deferred
在 dataReceived
函数中创建,它将打印 data
和无效的 toto
变量。 errorback 函数(即 self.error_func()
)被链接起来以捕获 display_data()
中发生的错误。您应该努力避免 dataReceived 函数本身出现错误。这并不总是可能的,但应该尝试一下。希望这有帮助