ftplib returns EOFError

Francesco Bochicchio bockman at virgilio.it
Mon May 19 15:02:33 EDT 2008


On Mon, 19 May 2008 13:27:23 +0100, Jon Bowlas wrote:

> Hi All,
> 
> I've written a little method to connect to an ftpserver which works well,
> however when I send a file using this ftp connection oddly I _sometimes_ get
> returned an EOFError from ftplib.getline even though my file is actually
> transferred. 
> 
> Here's my script:
> 
>     def uploadViaFtp(self, file, filename):
>         '''A method to upload a file via ftp'''
>         ftpserverloc = self.getItunesUftpServer()
>         ftpserverusername = self.getItunesUftpUser()
>         ftpserverpassword = self.getItunesUftpPsswd()
>         ftp = ftplib.FTP(ftpserverloc)
>         ftp.login(ftpserverusername, ftpserverpassword)
>         try:
>             ftp.storbinary("STOR " + filename, file, 1024)
>         finally:
>             file.close()
>         ftp.quit()
> 
> 
> And here's the traceback:
> Traceback (innermost last):
>   Module ZPublisher.Publish, line 114, in publish
>   Module ZPublisher.mapply, line 88, in mapply
>   Module ZPublisher.Publish, line 40, in call_object
>   Module Products.FileSystemSite.FSPythonScript, line 108, in __call__
>   Module Shared.DC.Scripts.Bindings, line 311, in __call__
>   Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec
>   Module Products.FileSystemSite.FSPythonScript, line 164, in _exec
>   Module None, line 28, in upload_submit
>    - <FSPythonScript at
> /silva/service_views/UCLItunesUPodcast/edit/Asset/UCLItunesUTrack/upload_sub
> mit>
>    - Line 28
>   Module Products.UCLItunesUPodcast.UCLItunesUService, line 138, in
> uploadViaFtp
>   Module ftplib, line 523, in quit
>   Module ftplib, line 246, in voidcmd
>   Module ftplib, line 221, in voidresp
>   Module ftplib, line 207, in getresp
>   Module ftplib, line 193, in getmultiline
>   Module ftplib, line 183, in getline
> EOFError
> 
> 
> Any help in catching and ignoring this error would be greatly appreciated.
> 
> Regards
> 
> Jon

ftp.quit() attempts to send a quit command and wait for the response
before closing. Apparently, sometime the connection is already closed
(don't know why) and you get the exception.

I guess you could do something like this:

 try:
	ftp.quit()
 except EOFError:
       ftp.close()


Ciao
-----
FB



More information about the Python-list mailing list