2012-12-18 42 views
4

如果文件不存在,我想上傳一個ftp站點上的文件。這是一個更復雜的應用程序的任務,但在這種情況下並不重要。 我的想法是檢查文件是否存在與FTP.size(filename)方法,如果錯誤是550(系統找不到指定的文件)上載文件。ftplib,如何管理沒有errno屬性的異常?

我(不工作)代碼:

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) 

但我想有一個最好的解決方案,因爲這隻有在錯誤號是異常消息中的第一個字的情況下才起作用。

預先感謝您!

+0

這段代碼在我的電腦上工作得很好。你確定你使用的是正確版本的Python嗎?我跑2.7。 – drRoflol

回答

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),你得到的一件事。

0

也許這有幫助,它來自ftplib的文檔。

請注意,SIZE命令不是標準化的,但受許多常用服務器實現的支持。

鏈接here

嘗試使用另一種方法,如果該文件excists找出來。

相關問題