diff --git a/py/_code/code.py b/py/_code/code.py index 4e8842b61..6558a8dcf 100644 --- a/py/_code/code.py +++ b/py/_code/code.py @@ -354,9 +354,17 @@ class ExceptionInfo(object): abspath=False, tbfilter=True, funcargs=False): """ return str()able representation of this exception info. showlocals: show locals per traceback entry - style: long|short|no traceback style + style: long|short|no|native traceback style tbfilter: hide entries (where __tracebackhide__ is true) """ + if style == 'native': + import traceback + return ''.join(traceback.format_exception( + self.type, + self.value, + self.traceback[0]._rawentry, + )) + fmt = FormattedExcinfo(showlocals=showlocals, style=style, abspath=abspath, tbfilter=tbfilter, funcargs=funcargs) return fmt.repr_excinfo(self) diff --git a/py/_plugin/pytest_terminal.py b/py/_plugin/pytest_terminal.py index be3d21e5f..6487c0662 100644 --- a/py/_plugin/pytest_terminal.py +++ b/py/_plugin/pytest_terminal.py @@ -22,7 +22,7 @@ def pytest_addoption(parser): help="(deprecated, use -r)") group._addoption('--tb', metavar="style", action="store", dest="tbstyle", default='long', - type="choice", choices=['long', 'short', 'no', 'line'], + type="choice", choices=['long', 'short', 'no', 'line', 'native'], help="traceback print mode (long/short/line/no).") group._addoption('--fulltrace', action="store_true", dest="fulltrace", default=False, diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index e8db92c83..a596d8dfe 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -700,3 +700,12 @@ raise ValueError() repr = excinfo.getrepr(**reproptions) repr.toterminal(tw) assert tw.stringio.getvalue() + + + def test_native_style(self): + excinfo = self.excinfo_from_exec(""" + assert 0 + """) + repr = excinfo.getrepr(style='native') + assert repr.startswith('Traceback (most recent call last):\n File') + assert repr.endswith('\n assert 0\nAssertionError: assert 0\n')