
3 erreurs d'indentation (et comment y remédier)
La syntaxe de Python tourne principalement autour des indentations. Découvre dans cet article les 3 erreurs les plus courantes et comment y remédier.
On est bien content avec Python de ne pas avoir à s'embêter avec des accolades dans tous les sens pour délimiter des blocs d'instruction.
Le désavantage (puisqu'il en faut bien un) c'est de se retrouver dans certains cas de figure avec des erreurs d'indentation.
Dans cet article, on va voir les 3 erreurs les plus fréquentes concernant l'indentation :
IndentationError
: expected an indented blockIndentationError
: unindent does not match any outer indentation levelTabError
: inconsistent use of tabs and spaces in indentation
Cependant je tiens à vous rassurer, il est très facile d'en venir à bout et c'est définitivement le genre d'erreurs que vous ne ferez qu'au début.
Avec Python, vous devez absolument mettre du code à l'intérieur d'un bloc d'instruction.
Un bloc d'instruction et l'indentation permet de définir la notion d'appartenance d'une ligne de code à une autre.
On retrouve donc les blocs d'instructions dans les boucles, les structures conditionnelles, les fonctions, les classes etc.
Le code suivant vous retournera donc l'erreur expected an indented block
:
def main():
for _ in range(5):
return True
>>> IndentationError: expected an indented block
Si vous ne savez pas encore ce que vous souhaitez mettre à l'intérieur de votre bloc d'instruction, vous pouvez mettre l'instruction pass
, qui a comme effet... de ne rien faire (mais au moins le script ne plantera pas) :
def main():
for _ in range(5):
pass
return True
☝️ Un Python heureux 🐍
Cette erreur arrive dans le cas où vos niveaux d'indentation ne sont pas tous alignés.
Cela arrive majoritairement aux gens qui s'obstinent à utilisent 4 espaces au lieu d'une tabulation.
Il arrive en effet qu'on manque un espace et qu'on se retrouve donc avec certaines indentations qui contiennent 4 espaces et d'autres 3 ou 5 comme ici :
def main():
for _ in range(5):
print("Docstring")
print("c'est génial")
if __name__ == "__main__":
main()
Vous voyez que les deux print
ne sont pas correctement alignés.
Si vous lancez ce script, vous aurez l'erreur unindent does not match any outer indentation level
car la ligne print("c'est génial")
ne correspond à aucun niveau d'indentation du script.
En effet, dans ce script vous avez plusieurs blocs d'instruction :
- L'espace global qui contient la définition de la fonction
main
et la structure conditionnelle. - L'espace de la fonction main qui contient la boucle
for
. - L'espace de la boucle for qui contient le premier
print
.
Le deuxième print
n'appartient à aucun de ces blocs d'instruction que Python a identifié et provoque donc une erreur.
Il faudra donc choisir le niveau d'indentation que vous souhaitez lui attribuer :
- Aucune indentation : le
print
sera donc dans l'espace global.
def main():
for _ in range(5):
print("Docstring")
print("c'est génial")
if __name__ == "__main__":
main()
- Un niveau d'indentation : le
print
sera dans la fonctionmain
.
def main():
for _ in range(5):
print("Docstring")
print("c'est génial")
if __name__ == "__main__":
main()
- Deux niveaux d'indentation : le
print
sera à l'intérieur de la bouclefor
.
def main():
for _ in range(5):
print("Docstring")
print("c'est génial")
if __name__ == "__main__":
main()
Attention également de ne pas aller trop loin dans l'autre sens !
Si vous ajoutez un niveau d'indentation supplémentaire, vous aurez là encore une erreur d'indentation (cette fois-ci IndentationError : unexpected indent
) :
def main():
for _ in range(5):
print("Docstring")
print("c'est génial")
if __name__ == "__main__":
main()
Cette erreur est celle que je vois le plus souvent parmi les débutants car c'est celle qui est la plus difficile à identifier.
À première vue, ce code semble tout à fait valide.
Les indentations sont correctes, il ne manque pas de deux points ou quoi que ce soit qui pourrait causer une erreur.

Cette erreur n'est visible que si vous affichez les caractères invisibles dans votre éditeur de texte.
La façon la plus rapide d'afficher ces caractères est bien souvent de sélectionner votre code.
Exemple avec Visual Studio Code :

☝️ Vous voyez sur l'image ci-dessus que pour le deuxième print
, on voit un caractère différent des points qui représentent les espaces.
Ce caractère indique que l'indentation a été effectuée avec une tabulation au lieu de 4 espaces.
Cette erreur arrive souvent quand vous copiez du code d'un éditeur à un autre ou du code depuis internet.
Pas de panique si vous vous retrouvez avec cette erreur, la plupart des éditeurs disposent de fonctions pour uniformiser les indentations automatiquement.
Pas besoin donc de refaire à la main toutes vos indentations avec 4 espaces !
Avec Visual Studio Code
👉 Allez dans View > Command Palette (Cmd + Shift + P)

👉 Dans le panneau qui s'ouvre, cherchez la commande 'Convert Indentations to Spaces' et exécutez là.

Avec PyCharm
👉 Allez dans Edit > Convert Indents > To Spaces

Avec Sublime Text
👉 Allez dans View > Indentation > Convert Indentations to Spaces

Vous avez donc maintenant toutes les clés en main pour résoudre ces trois erreurs que l'on retrouve très souvent avec Python.
La grande force de Python c'est ça syntaxe, et il fallait bien que cela vienne avec quelques inconvénients.
Mais vraiment, si vous portez attention à ces quelques erreurs et ne passez pas votre temps à passer des espaces aux tabulations, vous ne devriez plus jamais avoir ces problèmes.
Réservé aux membres abonnés

Pour pouvoir prendre des notes et ajouter des favoris tu dois être abonné à Docstring.
Voir les formulesBravo, tu es prêt à passer à la suite 👏

Tu as complété % du parcours.
Mes notes
Sauvegardé