python
runtime_error
ai_generated
true
pytest.PytestUnraisableExceptionWarning: 忽略异常: <sqlite3.Connection 对象>
pytest.PytestUnraisableExceptionWarning: Exception ignored in: <sqlite3.Connection object>
ID: python/pytest-random-order-fixture-collision
80%修复率
84%置信度
0证据数
2025-12-14首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.15.x | active | — | — | — |
根因分析
pytest-randomly 重排测试;依赖先前测试副作用的 fixture(隐式顺序)现在最先运行,资源处于意外状态,GC 时触发不可抛出异常。
English
pytest-randomly reorders tests; a fixture that relied on side effects from a previously-run test (implicit ordering) now runs first, leaving resources in an unexpected state and triggering unraisable exceptions at GC.
解决方案
-
93% 成功率
@pytest.fixture def db(tmp_path): p = tmp_path / 'test.db' conn = sqlite3.connect(p) conn.executescript(SCHEMA) yield conn conn.close() -
85% 成功率
pytest --randomly-seed=last -x -q # Reproduce, then refactor fixtures to remove cross-test state
无效尝试
常见但无效的做法:
-
75% 失败
Hides the ordering bug; CI with a different seed will still fail, and the fixture remains order-dependent.
-
70% 失败
Makes local runs deterministic but the underlying implicit dependency remains; any seed change re-exposes the bug.