2013-01-13 67 views
1

我試圖使用python的ftplib上傳大量文件。
我應該捕捉什麼樣的異常以確定問題是連接錯誤(所以我可以重新連接)?捕獲ftplib中的連接錯誤導致的異常


編輯:
我在這種情況下試圖all_errors

  • 通過ftplib連接到FTP服務器和文件上傳之前暫停的應用程序(通過調試器)
  • 通過服務器關閉連接
  • 恢復申請

有了這個代碼:

 try:   
      self.f.cwd(dest) 
      return self.f.storbinary(('STOR '+n).encode('utf-8'), open(f,'rb')) 
     except ftplib.all_errors as e: 
      print e 

異常捕獲,但all_errors是空的:

e EOFError: 
    args tuple:() 
    message str:  
+0

我不明白你怎麼想告訴我們的。所以'ftplib.all_errors'工作,但它是空的? – dav1d

+0

@ dav1d:是的;(檢查我的第二個編輯);並不總是,但大多數時候它有一個空元組! (當它被捕獲!!) – RYN

+1

'e'是被捕獲的錯誤的實例,它僅僅意味着沒有參數被傳遞給EOFError。這不是你必須關心的。 – dav1d

回答

1

試試這個,

import socket 
import ftplib 

try: 
    s = ftplib.FTP(server , user , password) 
except ftplib.all_errors as e: 
    print "%s" % e 
+0

請檢查我的編輯 – RYN

1

一個簡單的方法來捕捉異常既從一個FTP服務器可能是:

import ftplib, os 

def from_ftp(server, path, data, filename = None): 
    '''Store the ftp data content to filename (anonymous only)''' 
    if not filename: 
     filename = os.path.basename(os.path.realpath(data)) 

    try: 
     ftp = ftplib.FTP(server) 
     print(server + ' -> '+ ftp.login())   
     print(server + ' -> '+ ftp.cwd(path)) 
     with open(filename, 'wb') as out: 
      print(server + ' -> '+ ftp.retrbinary('RETR ' + data, out.write)) 

    except ftplib.all_errors as e: 
     print('Ftp fail -> ', e) 
     return False 

    return True 

def to_ftp(server, path, file_input, file_output = None): 
    '''Store a file to ftp (anonymous only)''' 
    if not file_output: 
     file_output = os.path.basename(os.path.realpath(file_input)) 

    try: 
     ftp = ftplib.FTP(server) 
     print(server + ' -> '+ ftp.login())   
     print(server + ' -> '+ ftp.cwd(path)) 
     with open(file_input, 'rb') as out: 
      print(server + ' -> '+ ftp.storbinary('STOR ' + file_output, out)) 

    except ftplib.all_errors as e: 
     print('Ftp fail -> ', e) 
     return False 

    return True 
相關問題