Python >> Tutoriel Python >  >> Python

IndentationError :l'annulation de l'indentation ne correspond à aucun niveau d'indentation externe

Résumé : L'erreur IndentationError: unindent does not match any outer indentation level se produit si vous utilisez une indentation incohérente des tabulations ou des espaces blancs pour les blocs de code indentés tels que le if bloc et le for boucle. Par exemple, Python lancera une erreur d'indentation si vous utilisez un for boucle avec quatre espaces blancs indentation pour la première ligne et un caractère de tabulation indentation de la deuxième ligne du corps de la boucle. Pour corriger l'erreur, utilisez le même nombre d'espaces vides pour tous les blocs de code en retrait.

IndentationError :l'annulation de l'indentation ne correspond à aucun niveau d'indentation externe

Vous avez dû rencontrer ce bogue stupide à un moment donné lors du codage. N'est-ce pas vraiment frustrant d'obtenir une erreur même si votre code est logiquement correct !

Mais après avoir lu cet article, vous ne rencontrerez probablement plus jamais cette erreur. Même si vous le faites, vous pourrez y remédier en un clin d'œil ! Alors sans plus tarder, plongeons dans notre discussion sur IndentationError en Python.

Indentation en Python

L'indentation fait référence aux espaces au début d'une ligne de code.

Dans d'autres langages de programmation comme Java , l'indentation sert simplement l'objectif de lisibilité , c'est-à-dire que même si vous ne suivez pas l'indentation appropriée dans ces langages, cela n'entravera pas l'exécution de votre code car ils utilisent des accolades {} pour représenter un bloc de code.

En Python, l'indentation est une fonctionnalité intégrale qui représente un bloc de code et détermine l'exécution de votre code. Lorsque vous ignorez l'indentation appropriée, Python lancera un IndentationError .

Chaque ligne de code dans un bloc doit être précédée d'un nombre égal d'espaces blancs. Cela signifie que si un for Le bloc de boucle contient deux lignes de code, puis chaque ligne doit avoir quatre espaces blancs (idéalement) devant eux. Si une ligne de code a trois espaces tandis que l'autre en a quatre, vous obtiendrez à nouveau un IndentationError .

Exemple 1

Étant donné une liste contenant des marques. Sur la base de conditions données, le programme suivant vise à diviser chaque numéro de la liste en une certaine note.

marks = [95,75,65,45,30]
for k in marks:
    if k>=90:
     print(k,' = grade A')
    elif k>=75 and k<90:
        print(k,' = grade B')
    elif k>=55 and k<75:
        print(k,' = grade C')
    elif k>=45 and k<55:
        print(k," = grade D")
 else:
     print(k," - FAIL!")

Sortie :

  File "D:/PycharmProjects/PythonErrors/rough.py", line 11
    else:
        ^
IndentationError: unindent does not match any outer indentation level

Dans l'exemple ci-dessus, l'erreur s'est produite dans le else déclaration parce qu'elle ne suit pas l'indentation correcte.

 ? Comment réparer « Erreur d'indentation :l'indentation ne correspond à aucun niveau d'indentation externe »

➥ Pour corriger IndentationError :l'annulation de l'indentation ne correspond à aucun niveau d'indentation externe utilisez le même nombre d'espaces blancs pour chaque ligne de code dans un bloc donné.

Essayons de corriger l'erreur dans notre exemple de scénario donné ci-dessus. Vous devez simplement fournir un espacement approprié avant l'instruction else de sorte qu'il soit conforme à l'ensemble du if-elif-else blocks dans les for loop .

Solution :

marks = [95, 75, 65, 45, 30]
for k in marks:
    if k >= 90:
        print(k, ' = grade A')
    elif k >= 75 and k < 90:
        print(k, ' = grade B')
    elif k >= 55 and k < 75:
        print(k, ' = grade C')
    elif k >= 45 and k < 55:
        print(k, " = grade D")
    else:
        print(k, " - FAIL!")

Sortie :

95  = grade A
75  = grade B
65  = grade C
45  = grade D
30  - FAIL!

✍️ Remarque :

  • Généralement, vous devez utiliser quatre espaces blancs pour l'indentation et cela est préférable aux tabulations.
  • Vous pouvez ignorer l'indentation dans la continuation de ligne, mais il est toujours recommandé d'indenter votre code pour une meilleure lisibilité.
    • Par exemple :si True :print("Bienvenue chez Finxter !")

Examinons un autre exemple pour nous assurer que vous avez une idée claire de la raison de l'apparition d'une telle erreur.

Exemple 2

Le programme suivant permet de trouver la factorielle d'un nombre entré par l'utilisateur.

def Factorial(n):  # return factorial
    result = 1
    for i in range(1, n):
        result = result * i
    print("factorial is ", result)
 return result

num = int(input("Enter a number: "))
print(Factorial(num))

Sortie :

  File "D:/PycharmProjects/PythonErrors/rough.py", line 6
    return result
                ^
IndentationError: unindent does not match any outer indentation level

Explication :

L'erreur ci-dessus s'est produite à cause de la ligne 6 qui indique que le return statement a une indentation incorrecte. Cela s'est produit parce que nous avons mélangé des tabulations et des espaces dans notre code pour mettre en retrait le bloc de code dans la fonction.

Solution :

Pour éviter cette erreur, vous pouvez soit utiliser TAB ou 4 espaces (recommandé) avant chaque ligne à l'intérieur de la fonction. Veuillez noter que le bloc dans la boucle for doit avoir 8 espaces blancs.

def Factorial(n):  # return factorial
    result = 1
    for i in range(1, n):
        result = result * i
    print("factorial is ", result)
    return result

num = int(input("Enter a number: "))
print(Factorial(num))

Sortie :

Enter a number: 5
factorial is  24
24

 ? Éviter ou corriger l'erreur d'indentation dans les éditeurs de code

D'après les exemples ci-dessus, il est évident que la principale raison derrière IndentationError en Python est la utilisation incorrecte des espaces blancs et des tabulations dans votre programme. Dans la plupart des éditeurs de code, vous pouvez fixer le nombre d'espaces/tabulations en définissant les niveaux d'indentation.

Examinons les paramètres de divers éditeurs de code qui nous permettent d'auto-indenter notre code ou corriger les erreurs préexistantes :

 ? Texte sublime

  1. Cliquez sur Afficher.
  2. Sélectionnez Retrait.
  3. Sélectionnez Indentation des onglets.
  4. Décochez l'option Indenter avec des espaces dans le sous-menu ci-dessus.

 ? Bloc-notes ++

Suivez les paramètres indiqués ci-dessous pour afficher les onglets ou les espaces blancs dans Notepad++ .

  1. Cliquez sur Afficher
  2. Sélectionnez Afficher le symbole
  3. Assurez-vous que les options Afficher les espaces blancs et les tabulations et Afficher le guide de retrait sont cochées.

 ? Utiliser un IDE

L'avantage d'utiliser un IDE comme PyCharm est que vous n'avez pas à vous soucier manuellement des indentations dans votre code car cela est pris en charge par l'IDE lui-même, comme le montre la présentation ci-dessous.

Conclusion

J'espère que vous avez apprécié la lecture de cet article et que vous avez appris à corriger les erreurs d'indentation en Python . Veuillez vous abonner et restez à l'écoute pour des articles plus intéressants à l'avenir !

? En savoir plus :Python IndentationError :retrait inattendu (Comment résoudre ce bogue stupide)

  • Voulez-vous maîtriser rapidement l'IDE Python le plus populaire ?
  • Ce cours vous fera passer de débutant à expert en PyCharm en 90 minutes environ.
  • Pour tout développeur de logiciels, il est crucial de bien maîtriser l'IDE, d'écrire, de tester et de déboguer un code de haute qualité avec peu d'effort.

Rejoignez la Masterclass PyCharm maintenant, et maîtrisez PyCharm d'ici demain !