Comment corriger l'erreur "indentation inattendue" en python?
python
syntax-error
Ventilateur Macintosh
la source
la source
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:
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!)
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?
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).
Si vous voulez une fonction qui ne fait rien, utilisez la commande "no-op" 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.
la source
except
partie d'unetry
clause. Le code a l'air correct (en ce que la ligne non indentée est censée être en dehors dutry
bloc) mais Python le signale comme une erreur de «retrait inattendu». Ceci est corrigé en ajoutant leexcept
, peut-être en utilisantpass
(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:
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
la source
Exécutez votre code avec l'option -tt pour savoir si vous utilisez des tabulations et des espaces de manière incohérente
la source
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.
la source
En utilisant une indentation correcte. Python est conscient des espaces, vous devez donc suivre ses directives d'indentation pour les blocs ou vous obtiendrez des erreurs d'indentation.
la source
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.
la source
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
la source
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
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.la source
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:
Cela renvoie un
IndentationError: unexpected unindent
lorsque le problème est bien sûr uneexcept:
instruction manquante .Mon point: vérifiez le code ci-dessus où le retrait inattendu est signalé!
la source
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.
la source
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.
la source
Copiez simplement votre script et mettez sous "" "tout votre code" "" ...
spécifiez cette ligne dans une variable .. comme,
maintenant exécutez ce code, dans Sublime Editor en utilisant ctrl + b, maintenant il imprimera le code indenté dans la console. c'est tout
la source
Tout ce que vous devez faire est de supprimer les espaces ou les tabulations au début des codes suivants
la source
Exécutez la commande suivante pour le résoudre:
Cela mettra à jour votre code et résoudra toutes les erreurs d'indentation :)
J'espère que cela résoudra
la source
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
la source
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.
Merci!
la source