2010-07-02 12 views
5

पायथन में एफ़टीपी लाइब्रेरी पर एक हैंडल प्राप्त करने का प्रयास कर रहा है। :)पायथन त्रुटि पकड़ने और एफ़टीपी

अब तक यह मिला।

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

दूसरा सवाल। : पी मैं त्रुटि पर अधिक विशिष्ट जानकारी कैसे प्राप्त कर सकता हूं? शायद त्रुटि कोड?

पायथन के लिए बहुत नया (एक घंटा या तो)।

उत्तर

3

आप

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

इस तरह की बहुत सामान्य है, 'छोड़कर ftblib.all_errors' एक अधिक सही जवाब है, जबकि अभी भी सभी एफ़टीपी त्रुटियों – guival

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

+2

@ बॉबर, नहीं, आपको 'आयात ftplib' कथन जोड़ने की आवश्यकता है। आपने ** मॉड्यूल ** आयात नहीं किया है - आपने केवल मॉड्यूल के भीतर से एक कक्षा आयात की है (एक अभ्यास जिसे मैं व्यक्तिगत रूप से घृणा करता हूं, लेकिन यह एक और मुद्दा है); इसलिए, 'ftplib.all_errors' जैसे योग्य नामों तक पहुंचने के लिए, आपको _also_ को' ftplib 'आयात करने की आवश्यकता है। –

संबंधित मुद्दे