Avoid exc_info cycles in several places and comment on trickier ones

This commit is contained in:
Martin
2010-08-16 00:18:59 +01:00
parent 18aecba3ff
commit 2a9e09d2d3
4 changed files with 19 additions and 9 deletions

View File

@@ -187,9 +187,7 @@ class TestProgram(object):
self.testNames = (self.defaultTest,) self.testNames = (self.defaultTest,)
self.createTests() self.createTests()
except getopt.error: except getopt.error:
exc_info = sys.exc_info() self.usageExit(sys.exc_info()[1])
msg = exc_info[1]
self.usageExit(msg)
def createTests(self): def createTests(self):
if self.testNames is None: if self.testNames is None:

View File

@@ -146,8 +146,11 @@ class RunTest(object):
raise raise
except: except:
exc_info = sys.exc_info() exc_info = sys.exc_info()
e = exc_info[1] try:
self.case.onException(exc_info) e = exc_info[1]
self.case.onException(exc_info)
finally:
del exc_info
for exc_class, handler in self.handlers: for exc_class, handler in self.handlers:
if isinstance(e, exc_class): if isinstance(e, exc_class):
self._exceptions.append(e) self._exceptions.append(e)

View File

@@ -179,8 +179,11 @@ class TestCase(unittest.TestCase):
raise raise
except: except:
exc_info = sys.exc_info() exc_info = sys.exc_info()
self._report_traceback(exc_info) try:
last_exception = exc_info[1] self._report_traceback(exc_info)
last_exception = exc_info[1]
finally:
del exc_info
return last_exception return last_exception
def addCleanup(self, function, *arguments, **keywordArguments): def addCleanup(self, function, *arguments, **keywordArguments):
@@ -319,9 +322,14 @@ class TestCase(unittest.TestCase):
try: try:
predicate(*args, **kwargs) predicate(*args, **kwargs)
except self.failureException: except self.failureException:
# GZ 2010-08-12: Don't know how to avoid exc_info cycle as the new
# unittest _ExpectedFailure wants old traceback
exc_info = sys.exc_info() exc_info = sys.exc_info()
self._report_traceback(exc_info) try:
raise _ExpectedFailure(exc_info) self._report_traceback(exc_info)
raise _ExpectedFailure(exc_info)
finally:
del exc_info
else: else:
raise _UnexpectedSuccess(reason) raise _UnexpectedSuccess(reason)

View File

@@ -12,6 +12,7 @@ __all__ = [
from testtools import TestResult from testtools import TestResult
# GZ 2010-08-12: Don't do this, pointlessly creates an exc_info cycle
try: try:
raise Exception raise Exception
except Exception: except Exception: