python runtime_error ai_generated true

AttributeError: 'TestUser' object has no attribute 'db'

ID: python/unittest-teardown-attribute-error

Also available as: JSON · Markdown · 中文
80%Fix Rate
87%Confidence
0Evidence
2024-07-09First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
3.9 active — — —
3.10 active — — —
3.11 active — — —
3.12 active — — —

Root Cause

setUpClass or setUp failed silently (or was misspelled) so the attribute assigned in setUp is never created, but tearDown still references it.

generic

中文

setUpClass 或 setUp 静默失败(或拼写错误),导致 setUp 中赋值的属性从未创建,但 tearDown 仍引用它。

Workarounds

  1. 85% success
    class TestUser(unittest.TestCase):
        def setUp(self):
            self.db = connect()
    
        def tearDown(self):
            if hasattr(self, 'db'):
                self.db.close()
  2. 95% success
    def setUp(self):
        self.db = connect()
        self.addCleanup(self.db.close)

Dead Ends

Common approaches that don't work:

  1. 80% fail

    Hides the real setup failure; subsequent tests may run against a half-initialized state.

  2. 70% fail

    If setUp is the failing method, referencing the attribute earlier just moves the error.