From: <bc...@wo...> - 2001-01-19 11:13:14
|
[Ben Hutchison] >Im getting an AttributeError in the httplib.py standard library when >using urlretrieve(): > >Traceback (innermost last): > File "FutureSourceSpider.py", line 86, in ? > File "c:\software\jython\Lib\urllib.py", line 68, in urlretrieve > File "c:\software\jython\Lib\urllib.py", line 198, in retrieve > File "c:\software\jython\Lib\urllib.py", line 169, in open > File "c:\software\jython\Lib\urllib.py", line 273, in open_http > File "c:\software\jython\Lib\httplib.py", line 430, in putrequest >AttributeError: __getitem__ > >The line throwing the error in inside an exception handler: > try: > self.send(str) > except socket.error, v: > # trap 'Broken pipe' if we're allowed to automatically >reconnect >>>>> if v[0] != 32 or not self.auto_open: <<<<< > raise > # try one more time (the socket was closed; this will >reopen) > self.send(str) > >I instrumented this code and determined that it executes when there is a >timeout setting up a socket connection. This timeout condition is for my >purpoises, transient and non-fatal. >The underlying message: java.net.NoRouteToHostException: Operation timed >out: no further information > >Possibly because this section rarely executes, a bug has gone >undiscovered? > >I dont fully understand what would cause the AttributeError on the line >above, can someone explain? In CPython, the exception would have been a subclass of Exception, which defines a __getitem__ method. Index 0 would then contain the error number and index 1 an textual description. So the httplib will most likely work on CPython. OTOH, the java exception is just passed back from the jython socket module. This exception can not be indexed as a list, therefore we get the AttributeError: __getitem__. There is also no error number in a java exception. I'm not yet sure what the right long term solution is. Either httplib could test that the exception is a sequence before doing any indexing. Or the socket module could catch the java.net exception and reraise it as a SocketException. Can anyone tell when the resend condition should occur under jython? regards, finn |