4

ファイルが存在しない場合、ftp サイトにファイルをアップロードしたいと考えています。これはより複雑なアプリケーションのタスクですが、この場合は重要ではありません。私の考えは、FTP.size(filename)メソッドでファイルが存在するかどうかを確認し、エラーが 550 (指定されたファイルが見つかりません) の場合はファイルをアップロードすることです。

私の(動作していない)コード:

from ftplib import *
ftp = FTP("ftp.test.com", "user", "password")
try:
    ftp.size("123.zip")
except ftplib.all_errors, e:
    if e.errno == 550:
        print "UPLOAD"
    else:
        print str(e)

返されるエラーは

Traceback (most recent call last):
  File "<pyshell#106>", line 4, in <module>
    if e.errno == 550:
AttributeError: 'error_perm' object has no attribute 'errno'

または一時的なエラーが発生した場合:

AttributeError: 'error_temp' object has no attribute 'errno'

リターンコードを管理するために私が見つけた唯一の解決策はこれでした:

except ftplib.all_errors, e:
if str(e.args[0]).split(" ", 1)[0] == "550":
        print "UPLOAD"
    else:
        print str(e)

しかし、これはエラー番号が例外メッセージの最初の単語である場合にのみ機能するため、最善の解決策があると思います。

前もって感謝します!

4

2 に答える 2

1

私はそのエラーの性質を正確には知らないので、あなたができることは、except節がアクティブになったときに dir(e) を出力することです。次に、エラーのすべてのプロパティが表示されます。フラグとしてほとんど失敗しないのは「error.message」です。これは文字列であるため、それを使用して if 句を作成できます。

あなたは次のようなもので終わるでしょう

try:
    ftp.size("123.zip")
except ftplib.all_errors as e:
    if e.message == 'message of the error'
        print 'UPLOAD'
    else:
        print str(e)

ちなみに、メッセージは str(e) を実行したときに得られるものの 1 つです。

于 2012-12-18T10:38:46.213 に答える
0

おそらくこれが役立つでしょう。これは ftplib のドキュメントからのものです。

SIZE コマンドは標準化されていませんが、多くの一般的なサーバー実装でサポートされていることに注意してください。

リンクはこちら

別の方法を使用して、ファイルが存在するかどうかを確認してください。

于 2014-03-27T12:25:49.500 に答える