2016-08-30 9 views
1

私はひどくひどく、twisted.internet.protocol.ProtocolオブジェクトのdataReceivedメソッド内で自分のコードをデバッグするのに問題があります。TwistedでProtocol.dataReceivedをデバッグする方法

は、私がdataReceivedErrbackを追加する方法を見つけることができませんでした。この

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()) 

のようないくつかのコードを考えます。方法はありますか?その振る舞いをデバッグする別の方法は?

ご協力いただきありがとうございます。

答えて

1

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)) 

deferreddataと無効toto変数を出力しますdataReceived機能で作成されます。ここでエラーをキャッチする方法の例があります。エラーバック関数(self.error_func())は、display_data()で発生するエラーを捕捉するためにチェーンされています。 dataReceived関数自体にエラーがないように非常に努力する必要があります。これは常に可能なわけではありませんが、試してみるべきです。希望により、

関連する問題