2017-08-31 5 views
0

私のトランプクライアントは現在接続されていませんので、self.transport.open()への呼び出しはタイムアウトし、プログラムの実行はそのまま続行する必要があります。しかし、タイムアウトが例外を発生させる理由、スタックトレースがコンソールに出力される理由、そしてこれが問題を示しているかどうかを知りたい。tryブロック内で発生したThrift例外からのスタックトレースがコンソールに表示されるのはなぜですか?

コード:

def connect(self, url=None): 
    """Attempt to connect to supervisor Thrift server""" 
    if conf.TESTING: 
     return 

    try: 
     self.url = url if url is not None else self.url 
     self.socket = TSocket.TSocket(self.url, constants.kSupervisorPort) 
     self.socket.setTimeout(1000) 
     self.transport = TTransport.TBufferedTransport(self.socket) 
     self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport) 
     self.client = Supervisor.Client(self.protocol) 
     log.warning("...Im about to raise an exception from inside a try block!") 
     self.transport.open() 
     self.connected = True 
     log.info('[TaskStateClient] Connected at url: ' + self.url) 

    except Exception: 
     log.warning("...and now Im handling the raised exception...") 

およびスタックトレース:あなたはTSocketに関連するロガーのためにその後

import logging 
for key in logging.Logger.manager.loggerDict: 
    print(key) 

を使用して、アクティブなロガーを印刷

-> Running 
python app.py 
werkzeug : INFO  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 
root  : WARNING ...Im about to raise an exception from inside a try block! 
thrift.transport.TSocket: INFO  Could not connect to ('192.168.1.219', 9002) 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/thrift/transport/TSocket.py", line 104, in open 
handle.connect(sockaddr) 
    File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
timeout: timed out 
thrift.transport.TSocket: ERROR Could not connect to any of [('192.168.1.219', 9002)] 
root  : WARNING ...and now Im handling the raised exception... 
+0

プログラムが停止していますか?あなたは_Debug_モード(何らかの種類)ではないのですか?例外トレースバックだけが表示されますか?どうやら(出力を読んだ後)明らかにそうであるように見える: "_root:警告...私はtryブロックの中から例外を発生しようとしている!" – CristiFati

+0

プログラムの実行が停止しません。トレースバックは、デバッグモードの開始時と終了時の両方で生成され、その他のトレースバックは生成されません(他の例外も処理されますが)。私の警告文は私のものです。見てくれてありがとう! –

+1

それから、私は問題があるとは思わない。私は_thrift_を使ったことは一度もありませんでしたが、それが何かをすることを妨げたので例外が表示されただけです(しかし、キャッチされたとしても)。 – CristiFati

答えて

1

、あなたが設定することができますデバッグレベルをクリティカルにする

logging.getLogger('thrift.transport.TSocket').setLevel(logging.CRITICAL) 

または

logging.getLogger('thrift.transport.TSocket').setLevel(logging.NOTSET) 
関連する問題