使用FTPLIB时,请获得Eoferror和例外
题
我正在考虑使用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时没有得到异常,那是因为它可以内部处理它。
不隶属于 StackOverflow