0

メッセージを送信し、クライアントからの確認を待つ try/except ブロックがあります。クライアントが終了すると、pickle は EOFError を発生させますが、以下のコードはエラーをキャッチせず、正常なシャットダウンを実行しません。代わりにスタック トレースを出力します。「except socket.error、EOFError:」という行に関係していると思います-socket.errorとEOFErrorの両方を処理するために間違った構文を使用していますか?

        try:
            msgs = [1]
            self.sock.send(pickle.dumps(msgs))
            rdy = pickle.loads(self.sock.recv(2097152))
        except socket.error, EOFError: 
            print 'log socketmanager closing'
            self.terminate()
            break
4

2 に答える 2

2

Python 2.x では、フォームexcept a, bは type の例外をキャッチし、aそれを という変数に割り当てますb。あなたの場合、これはEOFError無視されることになります。代わりにこれを試してください:

...
except (socket.error, EOFError):
    ...

編集: 詳しく説明すると、Python 3.0 の新しい構文と、必須ではありませんが 2.6+ で例外の値をキャプチャするために利用できるのは ですexcept a as b

于 2011-03-11T19:17:43.103 に答える
0

breakforがエラーを引き起こしています。ループまたはtry/finallyブロック内でのみ使用できます。ドキュメントなどtry/exceptを参照してください

于 2011-03-11T19:13:05.457 に答える