While true en Python, pourquoi ne pas en avoir peur ?
Par Darko Stankovski, 09/01/2021 (Mise à jour 18/04/2026) — Débutant
Les boucles sont un concept fondamental en programmation. Elles consistent à répéter une action. le langage Python dispose de deux structures : les boucles for et les boucles while. La première sert à parcourir des séquences et la seconde à répéter une action en fonction d’une condition. Et quand cette condition est toujours vrai, on appelle ça une boucle infinie.
On apprends souvent à se méfier des boucles infinies mais pourtant, c'est la base beaucoup de programmes comme les tâche de fond (tel que les service Windows ou les deamons Linux) ou les jeux (une succession infinie de calculs d'images). C'est même le principe de fonctionnement des microcontrôleurs.
While : exécuter une action tant que
Commençons par rappeler que la structure d’une boucle avec le mot-clef while est la suivante :
while condition:
action
La boucle utilisant le mot-clef while va répéter son action tant que la condition est vrai. Cette boucle sert donc à répéter une action en fonction d’un état. Le nombre d’itérations n’est pas connu lors du démarrage de la boucle.
Cette boucle est souvent illustrée par la suite de Fibonacci pour laquelle nous souhaitons obtenir les valeurs de la suite jusqu’à une certaine limite. D’avance, nous ne connaissons pas le nombre d’itérations. Nous évaluons donc à chaque itération la valeur obtenue et si elle est inférieur à la limite, nous recommençons.
value = 1
previous = 0
while value < 30:
print(value)
value, previous = value + previous, value
Ceci est l'explication classique qui se permet une simplification : la condition est une expression qui retourne une valeur de type booléen (pour faire simple, évidemment, Python fera une interprétation booléenne de n'importe quel type) soit True ou False.
Et si au lieu de déclarer une expression, on testait directement une valeur ?
While : les bases de l’automatisation
Un code qui fait souvent réagir avec la boucle while est le suivant :
while True:
do_something()
Au lieu d’une condition, nous avons une valeur True. La boucle s’exécutera de manière infinie. À l’école, nous apprenons que c’est mal car, entre autre, le programme tourne alors sans fin.
Mais c’est justement le but !
L’objectif de la programmation est l’automatisation donc répéter des actions, pas juste de lancer des exécutions.
Souvent, cette automatisation consiste simplement à rester à l’écoute afin de réagir en fonction d’un état. Vous avez des dizaines d'exemples avec les Raspberry Pi et les GPIOs.
Si nous voulons faire quelque chose en fonction d'un capteur nous pouvons avoir un programme qui a cette structure (c’est du pseudocode) :
while True:
if sensor.is_activated():
do_something()
time.sleep(1000)
Cette boucle fera quelque chose si le capteur est activé puis (dans tous les cas) attendra une seconde avant de réévaluer le capteur.
Une boucle infinie n'est pas obligée de consommer 100% du CPU de manière indéfinie. Dans l'exemple de code précédent, elle n'en occupe pas 1 seconde tous les cycles (donc probablement la plupart du temps.
Et si on va plus loin, l'exemple précédent est une approche destinée aux débutants pour la rendre compréhensible. C'est du pooling ou du busy-waiting. Les problèmes sont que vérifier l'état, ici du capteur, consomme de la ressource et il y a de la latence car si un changement survient, on ne le voit qu'au cycle suivant.
Il y a des moyens plus efficaces qu'un time.sleep() qui nécessitent un article dédié mais dans tous les cas, nous serons dans une boucle while.
Des boucles infinies qui se finissent…
Certains programmes utiliseront des boucles infinies équivalentes à un while True mais auront tout de même une fin. C'est le cas par exemple pour les jeux vidéo qui calculent des images mais à un moment, le jeu s'arrête.
La solution est évidemment simple : suffit d'utiliser une variable qui va changer d'état.
running = True
while running:
...
if condition: # Par exemple, click sur exit
running = False
...
print('All done')
En conclusion
Les boucles (pas forcément toujours) infinies sont la base de beaucoup de programmes comme les jeux vidéos, les interfaces graphiques mais aussi les services. Nous sommes en général habitué a écrire des programmes qui ont un début et une fin oubliant que cette action peut être répétée et pas uniquement par un lancement utilisateur.
Les boucles infinies ne sont pas diaboliques. C'est la base de l'automatisation.