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.createTests()
except getopt.error:
exc_info = sys.exc_info()
msg = exc_info[1]
self.usageExit(msg)
self.usageExit(sys.exc_info()[1])
def createTests(self):
if self.testNames is None:

View File

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

View File

@@ -179,8 +179,11 @@ class TestCase(unittest.TestCase):
raise
except:
exc_info = sys.exc_info()
self._report_traceback(exc_info)
last_exception = exc_info[1]
try:
self._report_traceback(exc_info)
last_exception = exc_info[1]
finally:
del exc_info
return last_exception
def addCleanup(self, function, *arguments, **keywordArguments):
@@ -319,9 +322,14 @@ class TestCase(unittest.TestCase):
try:
predicate(*args, **kwargs)
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()
self._report_traceback(exc_info)
raise _ExpectedFailure(exc_info)
try:
self._report_traceback(exc_info)
raise _ExpectedFailure(exc_info)
finally:
del exc_info
else:
raise _UnexpectedSuccess(reason)

View File

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