Aller au contenu principal
U/
Idiomes
python

Écrire un context manager pour un fichier temporaire

Implémenter une classe Python avec __enter__ et __exit__ qui crée un fichier temporaire à l'entrée et le supprime automatiquement à la sortie du bloc with.

30 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Écrire une classe FichierTemporaire utilisable avec with. La méthode __enter__ crée un fichier vide dans le répertoire temporaire du système (via tempfile.mkstemp) et retourne le chemin du fichier. La méthode __exit__ supprime le fichier même si une exception est levée dans le bloc. Démontrer l'utilisation en écrivant une ligne dans le fichier à l'intérieur du bloc, puis en vérifiant que le fichier n'existe plus après la sortie.

Contraintes

  • Python ≥ 3.6.
  • Implémenter __enter__ et __exit__ manuellement (sans contextlib.contextmanager).
  • __exit__ reçoit (exc_type, exc_val, exc_tb) ; il doit supprimer le fichier dans tous les cas et renvoyer False (propagation des exceptions).
  • Utiliser tempfile.mkstemp ou tempfile.mktemp pour générer le nom du fichier.
  • Bibliothèque standard uniquement (tempfile, os, pathlib autorisés).
  • Le programme affiche le chemin du fichier pendant le bloc, puis "supprimé" ou "existe encore" après la sortie.

Exemple

Sortie attendue, le chemin exact variant d'une exécution à l'autre :

fichier : /tmp/tmpXXXXXX
supprimé

La dernière ligne doit rester supprimé même lorsqu'une exception est levée à l'intérieur du bloc with.

Espace solution
// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.