2017-10-18 29 views
0

私はネットワーク上でAsyncioを使ってPythonでアプリケーションを書いています。StreamReader.readexactly()はソケットエラーを引き起こしますが、StreamReader.read()を引き起こさないのはなぜですか?

try: 
    data = await self._reader.readexactly(10000) 

    # Code that uses data 
except IncompleteReadError as e: 
    data = e.parial 
    # More code 

このコードを実行しようとすると、実際には実行されないようです。 2行目にブレークポイントを設定すると、ブレークポイントはトリップしますが、残りの関数は無視されます。

私はエラーを取得近いものがasyncioロガーからこのです:data = await self._reader.read(10000)と二行目の交換

Traceback (most recent call last): 
    File "c:\python36\Lib\asyncio\selector_events.py", line 724, in _read_ready 
    data = self._sock.recv(self.max_size) 
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine 

は、この問題を解決するために表示されますが、私の問題をread()解決していない、私のようにする必要があり​​を使用してください。では、なぜ​​はソケットエラーを引き起こしますが、read()は発生しません。

答えて

0

2間の唯一の違いは、readexactly 正確 nバイトを読み込み、nバイトの前に終わりに達した場合ながらのnバイトまでを読んで、「読み」ということで、あなたのソケットを引き起こす可能性がありIncompleteReadErrorを上げていますあなたが指摘したエラーを取得します。

+0

なぜ例外ブロックが実行されないのですか?関数はその行で完全に終了します。 – ILikePizza555

+0

"IncompleteReadError"をキャッチするだけなので、それを "Exception"に変更して、exceptブロックが実行され、例外の型がスローされるかどうかを確認してください – ddor254

関連する問題