我正在考虑使用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时没有得到异常,那是因为它可以内部处理它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top