2010-07-02 126 views
5

嘗試在Python中獲取FTP庫的句柄。 :)Python錯誤捕獲和FTP

明白了這一點。

from ftplib import FTP 

server = '127.0.0.1' 
port = '57422' 

print 'FTP Client (' + server + ') port: ' + port 

try: 
    ftp = FTP() 
    ftp.connect(server, port, 3) 
    print 'Connected! Welcome msg is \"' + ftp.getwelcome() + '\"' 

    ftp.cwd('\\') 

    x = '1' 
    currentDir = '' 

except: //***What do I put here?*** 

http://docs.python.org/library/ftplib.html 說,有幾個錯誤代碼,我能趕上,但我不能這樣做

情況除外:ftplib.all_errors

第二個問題。 :P 如何檢索關於錯誤的更多特定信息?也許錯誤代碼?

非常新的python(一個小時左右)。

回答

3

你寫

except Exception, e: #you can specify type of Exception also 
    print str(e) 
+0

這是太普通,除了'是ftblib.all_errors'一個更正確的答案,同時還涵蓋了所有的FTP錯誤 – guival 2017-02-22 16:34:20

2

你不想嘗試捕捉異常類,除非你要。例外是包羅萬象的,而不是趕上拋出的特定類,socket.error

import ftplib 
    import socket <-- 

    server = '127.0.0.1' 
    port = '57422' 

    print 'FTP Client (' + server + ') port: ' + port 

    ftp = ftplib.FTP() 
    try: 
    ftp.connect(server, port, 3) 
    print 'Connected! Welcome msg is \"' + ftp.getwelcome() + '\"' 

    ftp.cwd('\\') 

    x = '1' 
    currentDir = '' 
    except socket.error,e: <-- 
    print 'unable to connect!,%s'%e 
16

我不能做

except: ftplib.all_errors 

當然不是,那簡直是語法錯誤!例外的元組後

except ftplib.all_errors: 

即結腸:當然,你可以用正確的語法做到這一點。

如何檢索有關錯誤的更具體的 信息?錯誤代碼可能是 ?

except ftplib.all_errors, e: 
    errorcode_string = str(e).split(None, 1)[0] 

例如,'530'現在將是errorcode_string值時,完整的錯誤消息是'530 Login authentication failed'

您可以在docs找到其他例外情況。

+0

名「FTPLIB」當我嘗試你的建議沒有被定義(原來的錯誤是一個錯字) 不知道到目前爲止該做什麼。我以爲我已經導入了'命名空間'。 – bobber205 2010-07-03 01:02:54

+2

@bobber,不,你需要添加一個'import ftplib'語句。你沒有導入**模塊** - 你只從模塊中導入了一個班級(這是我個人厭惡的做法,但這是另一個問題);因此,要訪問諸如'ftplib.all_errors'的限定名稱,您還需要'導入ftplib'。 – 2010-07-03 02:44:52