代码之家  ›  专栏  ›  技术社区  ›  sereizam

如何调试协议。在Twisted中接收的数据

  •  1
  • sereizam  · 技术社区  · 9 年前

    我是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 在…上 接收的数据 有办法吗?另一种调试其行为的方法?

    提前感谢你的帮助。

    1 回复  |  直到 9 年前
        1
  •  1
  •   notorious.no    9 年前

    dataReceived 因为该函数不是 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. 推迟 创建于 接收的数据 将打印的函数 data 和病人 toto 变量。错误反馈函数(即。 self.error_func() )链接以捕获在中发生的错误 display_data() 。您应该努力避免dataReceived函数本身出现错误。这并不总是可能的,但应该尝试一下。希望这有帮助