Серверы отправляют 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, то это потому, что он обрабатывает его внутренне.