2010-07-02 12 views
5

Versuchen Sie, die FTP-Bibliothek in Python zu behandeln. :)Python Fehler Catching & FTP

Got this so weit.

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 sagt es mehrere Fehlercodes sind ich fangen kann, aber ich kann das nicht

Ausnahme: ftplib.all_errors

Zweite Frage. : P Wie kann ich genauere Informationen zu dem Fehler abrufen? Vielleicht der Fehlercode?

Sehr neu zu Python (eine Stunde in oder so).

Antwort

3

Sie schreiben

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

Das ist viel zu allgemein, 'außer ftblib.all_errors' noch eine richtige Antwort ist, während alle Fehler ftp Abdeckung – guival

2

Sie nicht wollen, zu versuchen, eine Ausnahmeklasse zu fangen, wenn Sie zu haben. Ausnahme ist ein catch all, anstatt fangen die spezifische Klasse geworfen, 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

ich nicht

tun können
except: ftplib.all_errors 

Natürlich nicht, das ist einfach schlecht Syntax! Aber natürlich können Sie es mit der richtigen Syntax tun:

except ftplib.all_errors: 

das heißt, den Doppelpunkt nach das Tupel von Ausnahmen.

Wie kann ich spezifischere Informationen über den Fehler abrufen? Vielleicht der Fehlercode?

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

Z. B. '530' wird nun der Wert von errorcode_string sein, wenn die vollständige Fehlermeldung '530 Login authentication failed' war.

Sie können den Rest der Ausnahme in der docs finden.

+0

name‚ftplib‘ist nicht definiert, wenn ich versuche, was Sie vorgeschlagen (der ursprüngliche Fehler war ein Tippfehler) Ich bin mir nicht sicher, was ich bis jetzt tun soll. Ich dachte, ich hätte den 'Namespace' bereits importiert. – bobber205

+2

@bobber, nein, Sie müssen eine 'import ftplib' Anweisung hinzufügen. Sie haben das ** Modul ** nicht importiert - Sie haben nur eine Klasse aus dem Modul importiert (eine Praxis, die ich persönlich verabscheue, aber das ist ein anderes Problem); Um also auf qualifizierte Namen wie ftplib.all_errors zuzugreifen, müssen Sie auch ftplib importieren. –