2010-07-02 3 views
5

Cercando di ottenere un handle sulla libreria FTP in Python. :)Python Error Catching & FTP

Ottenuto questo finora.

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 dice che ci sono diversi codici di errore posso prendere, ma non posso fare

eccezione: ftplib.all_errors

Seconda domanda. : P Come posso recuperare informazioni più specifiche sull'errore? Forse il codice di errore?

Molto nuovo per Python (un'ora o così).

risposta

3

si scrive

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

Questo è il modo troppo generico, 'tranne ftblib.all_errors' è una risposta più corretta pur riguardando tutti gli errori FTP – guival

2

Non volete provare prendere un classe Exception a meno che non si deve. Eccezione è una cattura tutti, invece prendere la classe specifica di essere gettato, 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

non posso fare

except: ftplib.all_errors 

Certo che no, questo è semplicemente male sintassi! Ma naturalmente è possibile farlo con la sintassi corretta:

except ftplib.all_errors: 

vale a dire, i due punti dopo tupla di eccezioni.

Come posso recuperare informazioni più specifiche su sull'errore? Forse il codice di errore ?

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

esempio '530' sarà ora il valore della errorcode_string quando il messaggio di errore completo è stato '530 Login authentication failed'.

È possibile trovare il resto dell'eccezione nello docs.

+0

nome 'ftplib' non è definita quando provo quello che hai suggerito (l'errore originale era un errore di battitura) Non sono sicuro su cosa fare finora. Pensavo di aver già importato lo 'spazio dei nomi'. – bobber205

+2

@bobber, no, è necessario aggiungere un'istruzione 'import ftplib'. Non hai importato il ** modulo ** - hai importato solo una classe dal modulo (una pratica che detesto personalmente, ma questo è un altro problema); quindi, per accedere a nomi qualificati come "ftplib.all_errors", devi anche "importare ftplib". –