[New-bugs-announce] [issue44280] unittest filters out too many assertion stack frames from context/cause chains

Peter Hawkins report at bugs.python.org
Tue Jun 1 15:42:48 EDT 2021


New submission from Peter Hawkins <peter.hawkins at gmail.com>:

Example repro:
```
import unittest


def d():
  assert 2 == 3

def c():
  d()

def b():
  c()

def a():
  try:
    b()
  except Exception as e:
    assert 1 == 2


class MyTest(unittest.TestCase):

  def testException(self):
    a()


if __name__ == '__main__':
  unittest.main()
```

Example output from Python 3.9.0:
```
$ python atest.py
F
======================================================================
FAIL: testException (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/private/tmp/atest.py", line 15, in a
    b()
  File "/private/tmp/atest.py", line 11, in b
    c()
AssertionError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/private/tmp/atest.py", line 23, in testException
    a()
  File "/private/tmp/atest.py", line 17, in a
    assert 1 == 2
AssertionError

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)
```

Too many frames have been filtered out of the `__context__` exception, including a number of relevant frames for `c` and `d`. I believe this happens because unittest sets a `limit` here based on the contents of the main traceback:
https://github.com/python/cpython/blob/39dd141a4ba68bbb38fd00a65cdcff711acdafb5/Lib/unittest/result.py#L182

but that limit applies recursively to the `__context__` and `__cause__` chains, when the intent of the limit was presumably only to filter the main exception.

----------
messages: 394865
nosy: peter.hawkins
priority: normal
severity: normal
status: open
title: unittest filters out too many assertion stack frames from context/cause chains
versions: Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44280>
_______________________________________


More information about the New-bugs-announce mailing list