gpt4 book ai didi

python - 使用 ftplib 时获取 EOFError 以及异常

转载 作者:行者123 更新时间:2023-11-28 22:04:39 26 4
gpt4 key购买 nike

我正在研究使用 ftplib(可能还有 ftputil)来进行一些自动 FTP 文件同步。目前我有几台服务器可以对此进行测试,但是,当我与两台服务器进行成功对话时,每个错误回复都会收到 EOFError-s。例如:如果我尝试使用不正确的用户/密码登录,我将收到所有内容的 530 响应……但我也会收到 EOFError;如果我使用正确的用户/密码登录或在这样做之后尝试 dir() 等,我不会收到 EOFError。

它似乎只出现错误信息。我强烈怀疑这可能是由服务器而不是 python 引起的:我在其他地方没有发现任何关于这个问题的提及。但是,我对服务器设置几乎没有控制权。

我在征求意见:

  • 您首先知道可能导致错误的原因吗?
  • 如果是服务器端,您能否更具体一些?在我知道它是什么之前,我不知道我是否能够对此做任何事情......
  • 你认为我应该如何处理这件事?我想我可以在每次处理异常之前添加一个 except EOFError: pass,但如果您有更好/更简洁的想法,我很乐意听取他们的意见。

谢谢!

最佳答案

服务器正在发送 EOF 来告诉您他们已经终止了连接。

您应该将此事件与任何其他断开连接事件区别对待,只是显然您需要使用 except EOFError 来处理它。

查看来源,来自http://svn.python.org/view/python/trunk/Lib/ftplib.py?view=markup

# Internal: return one line from the server, stripping CRLF.
# Raise EOFError if the connection is closed
182 def getline(self):
183 line = self.file.readline()
184 if self.debugging > 1:
185 print '*get*', self.sanitize(line)
186 if not line: raise EOFError
187 if line[-2:] == CRLF: line = line[:-2]
188 elif line[-1:] in CRLF: line = line[:-1]
189 return line

EOFError 仅在连接上的 readline() 返回空行时引发,注释表明这是断开连接事件。

编辑你的评论:

服务器不发送空行。 readline() 返回下一个 \n\r\r\n 或全部以上取决于它的配置方式。在这种情况下,没有可读取的内容,因为已到达文件末尾。这会导致 readline() 返回 空行,这并不意味着已读取空行。如果读取了一个空行,readline() 将返回该行结束的字符(\n\r\n\r).

如果您在使用 FTPUtil 时没有收到异常,那是因为它在内部处理了它。

关于python - 使用 ftplib 时获取 EOFError 以及异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6818091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com