Python Language IndentationErrors (ou indentation SyntaxErrors)


Exemple

Dans la plupart des autres langages, l'indentation n'est pas obligatoire, mais en Python (et autres langages: premières versions de FORTRAN, Makefiles, Whitespace (langage ésotérique), etc.), ce qui peut être déroutant si vous venez d'une autre langue. Si vous copiez du code d'un exemple vers le vôtre ou simplement si vous êtes nouveau.

IndentationError / SyntaxError: retrait inattendu

Cette exception est levée lorsque le niveau d'indentation augmente sans raison.

Exemple

Il n'y a aucune raison d'augmenter le niveau ici:

Python 2.x 2.0 2.7
 print "This line is ok"
     print "This line isn't ok"
Python 3.x 3.0
 print("This line is ok")
     print("This line isn't ok")

Ici, il y a deux erreurs: la dernière et que l'indentation ne correspond à aucun niveau d'indentation. Cependant, un seul est affiché:

Python 2.x 2.0 2.7
 print "This line is ok"
  print "This line isn't ok"
Python 3.x 3.0
 print("This line is ok")
  print("This line isn't ok")

IndentationError / SyntaxError: unindent ne correspond à aucun niveau d'indentation externe

Apparaît que vous ne vous êtes pas complètement désintéressé.

Exemple

Python 2.x 2.0 2.7
def foo():
    print "This should be part of foo()"
   print "ERROR!"
print "This is not a part of foo()"
Python 3.x 3.0
 print("This line is ok")
  print("This line isn't ok")

IndentationError: attend un bloc en retrait

Après deux points (puis une nouvelle ligne), le niveau d'indentation doit augmenter. Cette erreur est soulevée lorsque cela ne s'est pas produit.

Exemple

if ok:
doStuff()

Remarque : Utilisez le mot pass clé pass (qui ne fait absolument rien) pour mettre simplement une method if , else , except , class , method ou definition sans indiquer ce qui se passera si appelé / condition est vrai (mais le faire plus tard ou dans le cas de except : il suffit de ne rien faire):

def foo():
    pass

IndentationError: utilisation incohérente des tabulations et des espaces dans l'indentation

Exemple

def foo():
    if ok:
      return "Two != Four != Tab"
        return "i dont care i do whatever i want"

Comment éviter cette erreur

N'utilisez pas d'onglets. Il est déconseillé par PEP8 , le guide de style pour Python.

  1. Configurez votre éditeur pour utiliser 4 espaces pour l'indentation.
  2. Effectuez une recherche et remplacez pour remplacer tous les onglets par 4 espaces.
  3. Assurez-vous que votre éditeur est configuré pour afficher des onglets de 8 espaces, afin que vous puissiez facilement réaliser cette erreur et la corriger.

Voir cette question si vous voulez en savoir plus.