Comment corriger l'erreur "indentation inattendue" en python?
Comment corriger l'erreur "indentation inattendue" en python?
Réponses:
Python utilise l'espacement au début de la ligne pour déterminer le début et la fin des blocs de code. Les erreurs que vous pouvez obtenir sont:
Retrait inattendu. Cette ligne de code a plus d'espaces au début que la précédente, mais celle qui précède n'est pas le début d'un sous-bloc (par exemple l'instruction if / while / for). Toutes les lignes de code d'un bloc doivent commencer par exactement la même chaîne d'espaces. Par exemple:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Celui-ci est particulièrement courant lors de l'exécution interactive de python: assurez-vous de ne pas mettre d'espaces supplémentaires avant vos commandes. (Très ennuyeux lors du copier-coller de code d'exemple!)
>>> print "hello"
IndentationError: unexpected indent
Unindent ne correspond à aucun niveau d'indentation externe. Cette ligne de code a moins d'espaces au début que la précédente, mais elle ne correspond également à aucun autre bloc dont elle pourrait faire partie. Python ne peut pas décider où il va. Par exemple, dans ce qui suit, l'impression finale est-elle censée faire partie de la clause if, ou non?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Attendu un bloc en retrait. Cette ligne de code a le même nombre d'espaces au début que la précédente, mais la dernière ligne devait commencer un bloc (par exemple, instruction if / while / for, définition de fonction).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Si vous voulez une fonction qui ne fait rien, utilisez la commande "no-op" pass :
>>> def foo():
... pass
Le mélange d'onglets et d'espaces est autorisé (au moins sur ma version de Python), mais Python suppose que les onglets comportent 8 caractères, ce qui peut ne pas correspondre à votre éditeur. Dites simplement "non" aux onglets. La plupart des éditeurs permettent leur remplacement automatique par des espaces.
La meilleure façon d'éviter ces problèmes est de toujours utiliser un nombre constant d'espaces lorsque vous indentez un sous-bloc, et idéalement d'utiliser un bon IDE qui résout le problème pour vous. Cela rendra également votre code plus lisible.
except
partie d'une try
clause. Le code a l'air correct (en ce que la ligne non indentée est censée être en dehors du try
bloc) mais Python le signale comme une erreur de «retrait inattendu». Ceci est corrigé en ajoutant le except
, peut-être en utilisant pass
(comme ici )
En Python, l'espacement est très important, cela donne la structure de vos blocs de code. Cette erreur se produit lorsque vous gâchez votre structure de code, par exemple comme ceci:
def test_function() :
if 5 > 3 :
print "hello"
Vous pouvez également avoir un mélange d'onglets et d'espaces dans votre fichier.
Je vous suggère d'utiliser un éditeur compatible avec la syntaxe Python comme PyScripter ou Netbeans
Activez les espaces visibles dans l'éditeur que vous utilisez et activez le remplacement des onglets par des espaces.
Bien que vous puissiez utiliser des onglets avec Python, le mélange d'onglets et d'espace entraîne généralement l'erreur que vous rencontrez. Le remplacement des onglets par 4 espaces est l'approche recommandée pour écrire du code Python.
Si vous écrivez Python en utilisant Sublime et obtenez des erreurs d'indentation,
vue -> indentation -> convertir l'indentation en espaces
Le problème que je décris est causé par l'éditeur de texte Sublime. Le même problème peut également être causé par d'autres éditeurs. Essentiellement, le problème est lié au fait que Python souhaite traiter les indentations en termes d'espaces par rapport à divers éditeurs codant les indentations en termes d'onglets.
Assurez-vous d'utiliser l'option "insérer des espaces au lieu des tabulations" dans votre éditeur. Ensuite, vous pouvez choisir une largeur de tabulation de, par exemple 4. Vous pouvez trouver ces options dans gedit sous edit -> preferences -> editor.
ligne du bas: UTILISEZ LES ESPACES pas les onglets
Cette erreur peut également se produire lors du collage de quelque chose dans l'interpréteur Python (terminal / console).
Notez que l'interpréteur interprète une ligne vide comme la fin d'une expression, donc si vous collez quelque chose comme
def my_function():
x = 3
y = 7
l'interpréteur interprétera la ligne vide avant y = 7
comme la fin de l'expression, c'est-à-dire que vous avez fini de définir votre fonction, et la ligne suivante - y = 7
aura une indentation incorrecte car c'est une nouvelle expression.
Un problème qui ne semble pas avoir été mentionné est que cette erreur peut survenir en raison d'un problème avec le code qui n'a rien à voir avec l'indentation.
Par exemple, prenez le script suivant:
def add_one(x):
try:
return x + 1
add_one(5)
Cela renvoie un IndentationError: unexpected unindent
lorsque le problème est bien sûr une except:
instruction manquante .
Mon point: vérifiez le code ci-dessus où le retrait inattendu est signalé!
Si l'indentation semble correcte, jetez un œil pour voir si votre éditeur a une option "Afficher les espaces". L'activer devrait permettre de trouver où les espaces et les tabulations sont mélangés.
Il y a une astuce qui a toujours fonctionné pour moi:
Si vous avez un retrait inattendu et que vous voyez que tout le code est parfaitement en retrait, essayez de l'ouvrir avec un autre éditeur et vous verrez quelle ligne de code n'est pas en retrait.
Cela m'est arrivé lorsque j'ai utilisé vim, gedit ou des éditeurs comme ça.
Essayez de n'utiliser qu'un seul éditeur pour votre code.
Copiez simplement votre script et mettez sous "" "tout votre code" "" ...
spécifiez cette ligne dans une variable .. comme,
a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..
maintenant exécutez ce code, dans Sublime Editor en utilisant ctrl + b, maintenant il imprimera le code indenté dans la console. c'est tout
Tout ce que vous devez faire est de supprimer les espaces ou les tabulations au début des codes suivants
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Exécutez la commande suivante pour le résoudre:
autopep8 -i <filename>.py
Cela mettra à jour votre code et résoudra toutes les erreurs d'indentation :)
J'espère que cela résoudra
Notepad ++ donnait l'espace de tabulation correct mais le problème d'indentation a finalement été trouvé dans l'éditeur de texte Sublime.
Utilisez l'éditeur de texte Sublime et allez ligne par ligne
L'indentation en Python est importante et ce n'est pas pour la lisibilité du code, contrairement à de nombreux autres langages de programmation. S'il y a un espace blanc ou une tabulation dans votre code entre des commandes consécutives, python donnera cette erreur car Python y est sensible. Nous sommes susceptibles d'obtenir cette erreur lorsque nous copions et collons du code sur n'importe quel Python. Assurez-vous d'identifier et de supprimer ces espaces à l'aide d'un éditeur de texte tel que Notepad ++ ou supprimez manuellement l'espace blanc de la ligne de code où vous obtenez une erreur.
Step1 :Gives error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]
Merci!