ftplibを使用する場合、例外とともにeoferrorを取得します
質問
私はFTPLIBの使用を検討しています(そしておそらく ftputil)自動化されたFTPファイルの同期を実行するため。現時点ではこれをテストするサーバーをいくつか持っていますが、両方のサーバーとの会話を成功させている間、各エラー返信でEoferror-Sを取得します。たとえば、誤ったユーザー/パスでログインしようとすると、すべての530の応答が得られます...しかし、eoferrorも取得します。正しいユーザー/パスでログインするか、そうしてからdir()を試してみてください。
エラーメッセージだけでのみ表示されるようです。これは、Pythonではなくサーバーによって引き起こされる可能性があると強く疑います。他の場所でこの問題について言及していません。ただし、サーバーのセットアップをほとんど制御できません。
私はアイデアを求めています:
- そもそも何がエラーを引き起こしているのか知っていますか?
- サーバー側の場合、もっと具体的になることができますか?それが何であるかを知るまで、私はそれについて何かできるかどうかはわかりません...
- 私はこれをどのように処理するべきだと思いますか?追加できると思います
except EOFError: pass
毎回私が例外を処理する前に、しかし、あなたがより良い/耳障りなアイデアを持っているなら、私はそれらを聞きたいと思っています。
ありがとう!
解決
サーバーが送信しています EOF
彼らが接続を終了したことをあなたに伝えるために。
明らかにそれを処理する必要があることを除いて、他の切断イベントとは違った方法でこれを扱う必要があります except EOFError
.
からソースを参照してください http://svn.python.org/view/python/trunk/lib/ftplib.py?view=markup
# Internal: return one line from the server, stripping CRLF.
# Raise EOFError if the connection is closed
182 def getline(self):
183 line = self.file.readline()
184 if self.debugging > 1:
185 print '*get*', self.sanitize(line)
186 if not line: raise EOFError
187 if line[-2:] == CRLF: line = line[:-2]
188 elif line[-1:] in CRLF: line = line[:-1]
189 return line
eoferrorは、時だけ育てられます readline()
接続では、空白行が返されますが、コメントは切断イベントであることが示されています。
コメントで編集します:
サーバーは空の行を送信しません。 readline()
すべてを次のものに戻します \n
また \r
また \r\n
または、構成方法に応じてすべてのアボーブ。この場合、 読むことは何もありません ファイルの終わりに到達したためです。これは〜をひき起こす readline()
に 戻る 空白の行、それは空白の行が読まれたという意味ではありません。空白の行が読まれていた場合、 readline()
ラインを終了したキャラクターを返します(\n
また \r
また \n\r
).
Ftputilを使用しているときに例外を取得しない場合、それは内部で処理するためです。