Merge pull request #4444 from RonnyPfannschmidt/fix-4386-2
fix #4386 - handle uninitialized exceptioninfo in repr/str
This commit is contained in:
commit
0b73d6d4f5
|
@ -0,0 +1 @@
|
||||||
|
Handle uninitialized exceptioninfo in repr/str.
|
|
@ -425,7 +425,10 @@ class ExceptionInfo(object):
|
||||||
self.traceback = _pytest._code.Traceback(self.tb, excinfo=ref(self))
|
self.traceback = _pytest._code.Traceback(self.tb, excinfo=ref(self))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<ExceptionInfo %s tblen=%d>" % (self.typename, len(self.traceback))
|
try:
|
||||||
|
return "<ExceptionInfo %s tblen=%d>" % (self.typename, len(self.traceback))
|
||||||
|
except AttributeError:
|
||||||
|
return "<ExceptionInfo uninitialized>"
|
||||||
|
|
||||||
def exconly(self, tryshort=False):
|
def exconly(self, tryshort=False):
|
||||||
""" return the exception as a string
|
""" return the exception as a string
|
||||||
|
@ -513,9 +516,13 @@ class ExceptionInfo(object):
|
||||||
return fmt.repr_excinfo(self)
|
return fmt.repr_excinfo(self)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
entry = self.traceback[-1]
|
try:
|
||||||
loc = ReprFileLocation(entry.path, entry.lineno + 1, self.exconly())
|
entry = self.traceback[-1]
|
||||||
return str(loc)
|
except AttributeError:
|
||||||
|
return repr(self)
|
||||||
|
else:
|
||||||
|
loc = ReprFileLocation(entry.path, entry.lineno + 1, self.exconly())
|
||||||
|
return str(loc)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
entry = self.traceback[-1]
|
entry = self.traceback[-1]
|
||||||
|
|
|
@ -33,6 +33,23 @@ class TestRaises(object):
|
||||||
except pytest.raises.Exception:
|
except pytest.raises.Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def test_raises_repr_inflight(self):
|
||||||
|
"""Ensure repr() on an exception info inside a pytest.raises with block works (#4386)"""
|
||||||
|
|
||||||
|
class E(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
with pytest.raises(E) as excinfo:
|
||||||
|
# this test prints the inflight uninitialized object
|
||||||
|
# using repr and str as well as pprint to demonstrate
|
||||||
|
# it works
|
||||||
|
print(str(excinfo))
|
||||||
|
print(repr(excinfo))
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
pprint.pprint(excinfo)
|
||||||
|
raise E()
|
||||||
|
|
||||||
def test_raises_as_contextmanager(self, testdir):
|
def test_raises_as_contextmanager(self, testdir):
|
||||||
testdir.makepyfile(
|
testdir.makepyfile(
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue