当尝试使用Python FTP_TLS对象下载文件时,是否获取AttributeError?

当尝试使用Python FTP_TLS对象下载文件时,是否获取AttributeError?,python,python-2.7,sockets,ftp,Python,Python 2.7,Sockets,Ftp,我已经从这篇文章中复制了一些代码。我对代码中正在发生的一切都有很好的理解,但是我完全被错误弄糊涂了。问题是在调用retrbinary函数时,我可以一直运行到最后一行。我得到一个错误: from ftplib import FTP_TLS import socket import ssl class tyFTP(FTP_TLS): def __init__(self, host='', user='', passwd='', acct='', keyfile=None, certfile

我已经从这篇文章中复制了一些代码。我对代码中正在发生的一切都有很好的理解,但是我完全被错误弄糊涂了。问题是在调用retrbinary函数时,我可以一直运行到最后一行。我得到一个错误:

from ftplib import FTP_TLS
import socket
import ssl

class tyFTP(FTP_TLS):
    def __init__(self, host='', user='', passwd='', acct='', keyfile=None, certfile=None, timeout=60):
        FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout)
    def connect(self, host='', port=0, timeout=-999):
        if host != '':
            self.host = host
        if port > 0:
            self.port = port
        if timeout != -999:
            self.timeout = timeout

        try: 
            self.sock = socket.create_connection((self.host, self.port), self.timeout)
            self.af = self.sock.family
            self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1)
            self.file = self.sock.makefile('rb')
            self.welcome = self.getresp()
        except Exception as e:
            print e
        return self.welcome

# FTP_ROOT_PATH = "/outgoing/"
FTP_SITE = "..."
# FTP_SITE = "..."
FTP_PORT = 990

UPLOAD = {
    "USERNAME": "...",
    "PASSWORD": "..."
}

DOWNLOAD = {
    "USERNAME": "...",
    "PASSWORD": "..."
}

remote_file = "..."
local_filepath = "..."

server = tyFTP()
server.connect(host=FTP_SITE, port=990)
server.login(user=DOWNLOAD['USERNAME'], passwd=DOWNLOAD['PASSWORD'])
server.prot_p()
server.retrbinary("RETR " + remote_file, open(local_filepath, "wb").write)
完整的错误对话框是:

AttributeError: 'int' object has no attribute 'wrap_socket'
文件“sample.py”,第48行,在
server.retrbinary(“RETR”+远程文件,打开(本地文件路径,“wb”).write)
文件“C:\Users\Alex\Anaconda2\lib\ftplib.py”,第718行,在retrbinary中
conn=self.transfercmd(cmd,rest)
文件“C:\Users\Alex\Anaconda2\lib\ftplib.py”,第376行,在transfercmd中
返回self.ntransfercmd(cmd,rest)[0]
文件“C:\Users\Alex\Anaconda2\lib\ftplib.py”,第712行,在ntransfercmd中
conn=self.context.wrap_套接字(conn,
AttributeError:“int”对象没有属性“wrap\u socket”

有人知道罪魁祸首是什么吗?

您使用timeout arg(是一个int)来代替这一行中的上下文变量:

File "sample.py", line 48, in <module>
server.retrbinary("RETR " + remote_file, open(local_filepath, "wb").write)
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 718, in retrbinary
conn = self.transfercmd(cmd, rest)
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 376, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 712, in ntransfercmd
conn = self.context.wrap_socket(conn,
AttributeError: 'int' object has no attribute 'wrap_socket'
应该是:

FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout)
见:

您能告诉我们整个代码吗……似乎
FTP\u TLS
是在其他地方创建的……工作得很好。非常感谢。
FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, context, timeout)