2010-07-02 16 views
5

Intentando obtener un control sobre la biblioteca de FTP en Python. :)Python Error Catching & FTP

Conseguido hasta ahora.

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 que hay varios códigos de error que puede coger pero no pueden hacer

excepto: ftplib.all_errors

Segunda pregunta. : P ¿Cómo puedo recuperar información más específica sobre el error? Tal vez el código de error?

Muy nuevo para python (una hora más o menos).

Respuesta

3

Escribes

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

Esto es demasiado genérico, excepto 'ftblib.all_errors' es una respuesta más correcta al tiempo que cubre todos los errores ftp – guival

2

Usted no quiere tratar coger una clase de excepción a menos que tenga que hacerlo. Excepción es un cajón de sastre, en lugar coger la clase específica de ser lanzada, 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

no puedo hacer

except: ftplib.all_errors 

Por supuesto que no, eso es simplemente mala sintaxis! Pero, por supuesto, puede hacerlo con la sintaxis correcta:

except ftplib.all_errors: 

es decir, después de los dos puntos la tupla de excepciones.

¿Cómo puedo recuperar información más específica sobre el error? Tal vez el código de error ?

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

por ejemplo, '530' será ahora el valor de errorcode_string cuando el mensaje de error completo era '530 Login authentication failed'.

Puede encontrar el resto de la excepción en el docs.

+0

nombre 'ftplib' no está definida cuando intento lo que usted sugiere (el error original fue un error tipográfico) No estoy seguro de qué hacer hasta ahora. Pensé que ya tenía el 'espacio de nombres' importado. – bobber205

+2

@bobber, no, debe agregar una instrucción 'import ftplib'. No importó el ** módulo **: solo importó una clase desde el módulo (una práctica que personalmente detesto, pero ese es otro problema); entonces, para acceder a nombres calificados como 'ftplib.all_errors', también _ necesita' importar ftplib'. –

Cuestiones relacionadas