pysftp给出了pysftp.exceptions.ConnectionException :(主机,端口),没有详细信息

时间:2017-04-19 15:07:23

标签: python-2.7 sftp pysftp

我尝试使用pysftp库连接到sftp服务器。这是我的代码:

import pysftp

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

with pysftp.Connection("sftp://host", "login", "password", cnopts=cnopts) as sftp:
    sftp.listdir()

它给了我例外:

pysftp.exceptions.ConnectionException :(' host',port)

但我不知道这个例外意味着什么,问题是什么。

1 个答案:

答案 0 :(得分:1)

你没有太多解释,因为这个库有bug。请参阅BitBucket上的源代码。

ConnectionException类没有很好地实现:

class ConnectionException(Exception):
    """Exception raised for connection problems

    Attributes:
        message  -- explanation of the error
    """

    def __init__(self, host, port):
        # Call the base class constructor with the parameters it needs
        Exception.__init__(self, host, port)
        self.message = 'Could not connect to host:port.  %s:%s'

如您所见,格式'无法连接到主机:端口。 %s:%s'未填充主机端口值。

但是,异常的名称很明确:您有连接错误。

遗憾的是,错误的细节丢失了:

def _start_transport(self, host, port):
    '''start the transport and set the ciphers if specified.'''
    try:
        self._transport = paramiko.Transport((host, port))
        # Set security ciphers if set
        if self._cnopts.ciphers is not None:
            ciphers = self._cnopts.ciphers
            self._transport.get_security_options().ciphers = ciphers
    except (AttributeError, socket.gaierror):
        # couldn't connect
        raise ConnectionException(host, port)

你可以尝试获取最后一个错误(不确定):

import sys

sys.exc_info()

注意:我建议您使用其他库(例如Paramiko)。