如何解决 FTP 错误 2 不是目录

How to solve FTP Error 2 Not a Directory

我正在使用下面的代码从 ftp server.But 下载文件 我收到错误 [Errno 2] No such file or directory:,但是文件存在于服务器中,我可以下载它通过终端。谁能帮帮我!!

import ftplib
import os
remotpath='folder/subfolder'
try:
   ftpclient = ftplib.FTP('ftp.xxxx.com')
   ftpclient.login('user', 'pass')
   ftpclient.cwd(remotpath)
   print "login succeessfull"
   files = ftpclient.nlst()
   for eachFile in files:
       saveTo = os.path.join(remotpath,eachFile)
       if (not os.path.exists(saveTo)):
           try:
            ftpclient.retrbinary('RETR ' + eachFile, open(saveTo, 'wb').write)
            #logging.info('\tdownloaded '  + saveTo)
            downloaded += 1
        except BaseException as e:
            print('\terror downloading inside first %s - %s' % (eachFile, e.__str__()))
        except ftplib.error_perm:
            print('\terror downloading inside second %s - %s' % (eachFile, ftplib.error_perm))  

except Exception as e:
       print e    

目标目录./folder/subfolder是否存在?

如果没有,您需要在下载文件之前创建它。使用 OS 命令 (mkdir) 或在 Python 中使用 os.makedirs() :

import os
try:
    os.makedirs(remotpath)
except OSError as exception:
    if exception.errno != errno.EEXIST:
        raise

您可以在 for 循环之前的某处添加它。

在另一个问题上,异常处理程序的顺序意味着 所有 内部 try 块中引发的异常将在 except BaseException 语句中处理.这意味着 ftplib.error_perm 将被捕获在该语句中,因为 BaseException 更通用,而不是您可能期望的 ftplib.error_perm 语句中。

您应该按照通用性递增的顺序重新排列您的 except 语句。