python
runtime_error
ai_generated
true
ERROR: tearDown (tests.test_db.TestDB.test_insert) Traceback (most recent call last): File "test_db.py", line 42, in tearDown self.conn.close() AttributeError: 'NoneType' object has no attribute 'close'
ID: python/unittest-teardown-exception-masks-failure
80%Fix Rate
88%Confidence
0Evidence
2024-11-30First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 3.9 | active | — | — | — |
| 3.12 | active | — | — | — |
Root Cause
setUp failed or was skipped, leaving self.conn unset, but tearDown still runs and raises. The teardown error masks the original setup failure.
generic中文
setUp 失败或被跳过,导致 self.conn 未设置,但 tearDown 仍执行并抛出异常。teardown 错误掩盖了原始的 setup 失败。
Workarounds
-
92% success
Guard teardown with hasattr/getattr: def tearDown(self): conn = getattr(self, 'conn', None) if conn is not None: conn.close() -
95% success
Use addCleanup in setUp so cleanup only runs for successfully created resources: def setUp(self): self.conn = create_conn() self.addCleanup(self.conn.close)
Dead Ends
Common approaches that don't work:
-
85% fail
Silences real teardown errors and leaks resources, hiding the root cause of future failures.
-
80% fail
Leaves DB connections and temp files open across tests, causing flaky failures later.