From 0b4eeedccd64de32b0837dffd3400e58315ab405 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sat, 11 Jan 2020 19:26:50 -0500 Subject: Improvements to debugging while chasing #915 --- coverage/sqldata.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'coverage/sqldata.py') diff --git a/coverage/sqldata.py b/coverage/sqldata.py index cac2c4b3..03a64b2a 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -192,7 +192,7 @@ class CoverageData(SimpleReprMixin): write any disk file. warn: a warning callback function, accepting a warning message argument. - debug: a debug callback function. + debug: a `DebugControl` object (optional) """ self._no_disk = no_disk @@ -963,7 +963,7 @@ class SqliteDb(SimpleReprMixin): Use as a context manager, then you can use it like a :class:`python:sqlite3.Connection` object:: - with SqliteDb(filename, debug=True) as db: + with SqliteDb(filename, debug_control) as db: db.execute("insert into schema (version) values (?)", (SCHEMA_VERSION,)) """ @@ -1025,8 +1025,13 @@ class SqliteDb(SimpleReprMixin): def __exit__(self, exc_type, exc_value, traceback): self.nest -= 1 if self.nest == 0: - self.con.__exit__(exc_type, exc_value, traceback) - self.close() + try: + self.con.__exit__(exc_type, exc_value, traceback) + self.close() + except Exception as exc: + if self.debug: + self.debug.write("EXCEPTION from __exit__: {}".format(exc)) + raise def execute(self, sql, parameters=()): """Same as :meth:`python:sqlite3.Connection.execute`.""" @@ -1049,6 +1054,8 @@ class SqliteDb(SimpleReprMixin): ) except Exception: pass + if self.debug: + self.debug.write("EXCEPTION from execute: {}".format(msg)) raise CoverageException("Couldn't use data file {!r}: {}".format(self.filename, msg)) def executemany(self, sql, data): -- cgit v1.2.1