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

其他格式: JSON · Markdown 中文 · English
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.

generic

解决方案

  1. 93% 成功率
    @pytest.fixture
    def db(tmp_path):
        p = tmp_path / 'test.db'
        conn = sqlite3.connect(p)
        conn.executescript(SCHEMA)
        yield conn
        conn.close()
  2. 85% 成功率
    pytest --randomly-seed=last -x -q
    # Reproduce, then refactor fixtures to remove cross-test state

无效尝试

常见但无效的做法:

  1. 75% 失败

    Hides the ordering bug; CI with a different seed will still fail, and the fixture remains order-dependent.

  2. 70% 失败

    Makes local runs deterministic but the underlying implicit dependency remains; any seed change re-exposes the bug.