Description:
socket.error is handled correctly on python < 2.6
<type 'exceptions.AttributeError'>, 'error' object has no attribute 'errno'
File "/home/user/sql_func.py", line 824, in db_query
c=cursor.execute(arg_query)
File "/home/user/sql_func.py", line 824, in db_query
c=cursor.execute(arg_query)
File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method
result = method(*args, **kwargs) # try to execute
File "/usr/lib/python2.5/site-packages/DBUtils-1.0-py2.5.egg/DBUtils/SteadyDB.py", line 450, in tough_method
result = method(*args, **kwargs) # try to execute
File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python2.5/site-packages/mysql/connector/cursor.py", line 392, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query
statement))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 502, in cmd_query
statement))
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd
return self._socket.recv()
File "/usr/lib/python2.5/site-packages/mysql/connector/connection.py", line 357, in _send_cmd
return self._socket.recv()
File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain
values=(self.get_address(), err.errno))
File "/usr/lib/python2.5/site-packages/mysql/connector/network.py", line 183, in recv_plain
values=(self.get_address(), err.errno))
How to repeat:
broke socket connection during query.
Suggested fix:
Here is a patch which fixes the error.
--- python2/mysql/connector/network.py.orig 2012-09-14 09:40:32.000000000 +0200
+++ python2/mysql/connector/network.py 2012-09-14 09:47:13.000000000 +0200
@@ -179,8 +179,13 @@
except socket.timeout, err:
raise errors.InterfaceError(errno=2013)
except socket.error, err:
+ try:
+ msg = err.errno
+ except AttributeError:
+ msg = err
raise errors.InterfaceError(errno=2055,
- values=(self.get_address(), err.errno))
+ values=(self.get_address(), msg))
+
recv = recv_plain
def _split_zipped_payload(self, packet_bunch):
@@ -225,8 +230,12 @@
except socket.timeout, err:
raise errors.InterfaceError(errno=2013)
except socket.error, err:
+ try:
+ msg = err.errno
+ except AttributeError:
+ msg = err
raise errors.InterfaceError(errno=2055,
- values=(self.get_address(), e.errno))
+ values=(self.get_address(), msg))
tmp = []
for packet in packets: