Python 2.7)でこの特定の例外(およびこの例外のみ)をキャッチしようとしていますが、例外クラスに関するドキュメントが見つからないようです。何かありますか?
[Errno 10054] An existing connection was forcibly closed by the remote Host
これまでの私のコード:
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except # ?? What goes here for Errno 10054 ??
reconnect()
retry_action()
エラータイプはsocket.errorで、ドキュメントは here です。次のようにコードを変更してみてください:
import socket
import errno
try:
Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except socket.error as error:
if error.errno == errno.WSAECONNRESET:
reconnect()
retry_action()
else:
raise
例外をフィルタリングする場合、最初のステップは、例外のタイプを特定し、except句に追加することです。 pythonはトレースバックの一部として出力するので、通常は簡単です。タイプについては言及しませんが、socket.gaierrorのように見えるので、それで進めます。
次のステップは、例外の中で何が興味深いかを理解することです。この場合、 `help(socket.gaierror) 'がトリックを実行します。errnoというフィールドがあり、どのエラーをフィルター処理するかを判別するために使用できます。
次に、コードを再配置して、例外が再試行ループ内でキャッチされるようにします。
import socket
retry_count = 5 # this is configured somewhere
for retries in range(retry_count):
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except socket.gaierror, e:
if e.errno != 10054:
return False
reconnect()
return False
あなたは次のようなことを試みるかもしれません:
try:
# Deleting filename
self.ftp.delete(filename)
return True
except (error_reply, error_perm, error_temp):
return False
except Exception, e:
print type(e) # Should give you the exception type
reconnect()
retry_action()