Merge pull request #6 from PyMySQL/fix-nested-exception

Exception raised from _mysql should be reraise as is.
This commit is contained in:
INADA Naoki
2014-09-09 23:17:59 +09:00
3 changed files with 14 additions and 5 deletions

View File

@@ -34,6 +34,8 @@ def defaulterrorhandler(connection, cursor, errorclass, errorvalue):
connection.messages.append(error)
del cursor
del connection
if isinstance(errorvalue, BaseException):
raise errorvalue
if errorclass is not None:
raise errorclass(errorvalue)
else:

View File

@@ -214,8 +214,7 @@ class BaseCursor(object):
except (SystemExit, KeyboardInterrupt):
raise
except:
exc, value, tb = sys.exc_info()
del tb
exc, value = sys.exc_info()[:2]
self.messages.append((exc, value))
self.errorhandler(self, exc, value)
self._executed = query
@@ -273,8 +272,7 @@ class BaseCursor(object):
except (SystemExit, KeyboardInterrupt):
raise
except:
exc, value, tb = sys.exc_info()
del tb
exc, value = sys.exc_info()[:2]
self.errorhandler(self, exc, value)
qs = '\n'.join([query[:p], ',\n'.join(q), query[e:]])
if not PY2:

View File

@@ -92,7 +92,16 @@ class test_MySQLdb(capabilities.DatabaseTest):
def test_ping(self):
self.connection.ping()
def test_reraise_exception(self):
c = self.cursor
try:
c.execute("SELECT x FROM not_existing_table")
except MySQLdb.ProgrammingError as e:
self.assertEqual(e.args[0], 1146)
return
self.fail("Should raise ProgrammingError")
if __name__ == '__main__':
if test_MySQLdb.leak_test: