Fixture finalizers are skipped when setup is interrupted before `cached_result` is assigned
Les mainteneurs répondent en général sous 1 jour
@lpyu001 y travaille déjà.
Depuis le 20/9/2026.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 68/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- python
- Domaine
- testing-qa
Piste de recherche
Start by running the two-file reproduction in conftest.py and test_example.py, then trace pytest_fixture_setup, which the issue identifies as the relevant entry point. Confirm the fix by rerunning pytest and verifying that finalizer-ran is created after the interrupted setup.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
If a fixture registers a finalizer and its setup is interrupted by KeyboardInterrupt or another BaseException that is not handled by pytest_fixture_setup, the registered finalizer is not executed during teardown. This can leave resources created before the
interruption open or otherwise unreleased.
Reproduction Code
Create these two files in an empty directory.
conftest.py:
from pathlib import Path
import pytest
MARKER = Path(__file__).with_name("finalizer-ran")
@pytest.fixture
def resource(request):
request.addfinalizer(lambda: MARKER.write_text("ran", encoding="utf-8"))
raise KeyboardInterrupt
test_example.py:
def test_setup(resource):
pass
Run pytest, then check whether the finalizer marker was created:
python -m pytest -q test_example.py
python -c "from pathlib import Path; print(Path('finalizer-ran').exists())"
Actual Behavior
Pytest stops with the KeyboardInterrupt from fixture setup and exits with code 2.
The finalizer marker is not created:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
path/to/conftest.py:12: KeyboardInterrupt
no tests ran in 1.38s
False
Expected Behavior
Once request.addfinalizer() has successfully registered a finalizer, pytest should run that finalizer during teardown even if the fixture setup later raises an interruption.The marker should be created before pytest exits.
This is also the documented behavior for request.addfinalizer(): pytest's fixture documentation states that a finalizer is run once it has been added, even if the fixture raises after adding it.
Environment
The repro requires no third-party plugins. Verified on a clean virtualenv:
$ python -m pytest --version
pytest 9.1.1
$ python -m pip list
Package Version
--------- -------
iniconfig 2.3.0
packaging 26.3
pip 26.2.1
pluggy 1.6.0
Pygments 2.21.0
pytest 9.1.1
$ python -VV
Python 3.12.3 (main, Jan 22 2026, 20:57:42) [GCC 13.3.0]
$ uname -srm
Linux 6.8.0-124-generic x86_64
$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Ubuntu 24.04.4 LTS"
- Langage dominant
- Python
- Étoiles
- 14.7k
- Forks
- 3.6k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 34
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de pytest-dev/pytest
-
pytest 9.2.0 regression on Python 3.10.0: NodeId.__str__ raises AttributeErrorPeut-être pris @Aathi-27 l’a pris il y a 2 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
pytest-dev/pytest#15337 ·
Les mainteneurs répondent en général sous 1 jour
-
pytest.approx with a list expected value reports overflowing differences for numpy integer arraysPeut-être pris @rinopatrick l’a pris il y a 6 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
pytest-dev/pytest#15314 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Logging capture crashes when another thread registers a loggerPeut-être pris @Spikhalskiy l’a pris il y a 17 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pytest-dev/pytest#15237 ·
Les mainteneurs répondent en général sous 1 jour
-
`faulthandler_timeout` stops covering a test once setup, call or a subtest fails (`pytest_exception_interact` cancels the timer)Peut-être pris @mayur-dhavan l’a pris il y a 13 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pytest-dev/pytest#15180 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
monkeypatch.setattr fails to undo on objects with a custom __setattr__ (regression from #14969)Peut-être pris @hardikkaurani l’a pris il y a 44 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pytest-dev/pytest#15099 · 7 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de pytest-dev/pytest
Issues similaires
-
integration: logger
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
home-assistant/core#191147 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
documentation p4
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
MillenniumDawn/focus-tree-creation-tool#417 ·
Les mainteneurs répondent en général sous 3 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CharlesP44/Beem_Energy#96 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
rheeloaded/paperpull#153 ·
Les mainteneurs répondent en général sous 1 jour