Skip to content

Incorrect exception raised with two retrying blocks in function #534

@paulmdavies

Description

@paulmdavies

Caveats

I've tried to work out what's going on here with Googling, but I've been unsuccessful. I think this is a bug, but appreciate it could be either

  • Expected behaviour
  • Unsupported use case

It's also unusual for me to use two seperate retrying blocks in the same test case, but the test I'm writing is under development and one will be removed later.

Minimal Example

from unittest import TestCase
from unittest.mock import MagicMock

from tenacity import Retrying, stop_after_attempt


class TestTenacity(TestCase):
    def setUp(self):
        self.foo = MagicMock(side_effect=[2, 1])

    def test_tenacity(self):
        for attempt in Retrying(stop=stop_after_attempt(2)):
            with attempt:
                self.assertEqual(1, self.foo())

        for attempt in Retrying(stop=stop_after_attempt(2)):
            with attempt:
                raise Exception('bippy')

Flow

  • retry 0 attempt 0 (r0a0) raises
  • retry 0 attempt 1 (r0a1) does not raise
  • retry 1 attempt 0 (r1a0) raises

Expectation

We should see the exception r1a0 raised, and the unittest comparison should not appear, e.g.

Image

Reality

The correct exception is raised, but the previous exception has been rendered by unittest comparison, which is very confusing.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions