IndentationError: unindent ne correspond pas à l'extérieur niveau d'indentation
Quand je compile le code Python ci-dessous, je reçois
IndentationError: unindent ne correspond pas à l'extérieur niveau d'indentation
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
Pourquoi?
- et probablement range(1, n+1) sera mieux, si vous voulez inclure des 'n' dans votre calcul 🙂
- J'ai eu la même erreur, mais il m'est arrivé de retrait d'une méthode dans le code légèrement vers la gauche, ce qui a donné cette erreur au bas de la méthode suivante après. Donc cette erreur peut se produire non seulement à partir d'un mélange des tabulations et des espaces.
- J'utilise Sublime Text 3. J'ai un projet Django. J'ai corrigé l'erreur à l'aide
View > Indentation > Intent Using Spaces
- A cette question dans pycharm, le réglage des onglets et l'espacement des configs n'a pas fonctionné. Le problème est que j'avais un ~/.editorconfig fichier qui a été remplaçant la pycharm de configuration.
Vous devez vous connecter pour publier un commentaire.
D'autres affiches sont probablement raison...il y a peut être des espaces mixtes avec vos onglets. Essayez de faire une recherche & remplacer pour remplacer tous les onglets avec un peu d'espaces.
Essayez ceci:
IMPORTANT:
Espaces sont la méthode préférée - voir PEP008 L'Indentation et Des tabulations ou des Espaces?. (Merci à @Siha pour cela.)
Pour
Sublime Text
utilisateurs:Ensemble
Sublime Text
pour utiliser les tabulations pour l'indentation:View
-->Indentation
-->Convert Indentation to Tabs
Décochez la
Indent Using Spaces
option dans le même sous-menu ci-dessus.Cela permettra de résoudre immédiatement ce problème.
cat -T yourfile.py
aideront rendre cela plus facile à repérer. J'ai eu une tabulation au début de pydoc, et je me demandais ce retrait de la pydoc supprimé cette erreur pour moi.Facilement vérifier les problèmes avec des onglets/espaces, vous pouvez réellement faire ceci:
ou vous pouvez simplement mettre en place dans votre éditeur de texte correctement bien sûr 🙂
Êtes-vous sûr de ne pas mélanger les tabulations et des espaces dans votre indentation espace blanc? (Qui sera la cause de l'erreur.)
Remarque, il est recommandé de ne pas utiliser les onglets dans le code Python. Voir la guide de style. Vous devez configurer Notepad++ pour insérer des espaces pour les onglets.
Chaque fois que j'ai rencontré cette erreur, c'est parce que j'ai quelque peu mélangé les tabulations et des espaces dans mon éditeur.
Si vous utilisez Python IDLE editor, vous pouvez faire comme il l'indique dans l'un de des messages d'erreur similaires:
1) tout sélectionner, par exemple, Ctrl + Un
2) Allez à Format -> Untabify Région
3) vérifiez vos indentation est toujours correct, enregistrez et exécutez à nouveau le programme.
Je suis à l'aide de Python 2.5.4
La ligne:
result = result * i
doit être mis en retrait (c'est le corps de la boucle).Ou - vous avez mélangé les espaces et les tabulations
Si vous utilisez Vim, frappé échapper puis tapez
gg=G
Cette auto tirets tout et effacera tous les espaces que vous avez jeté dans.
Sur Atom
aller à
Puis vérifier à nouveau votre fichier indentation:
ou
Semble être un problème d'indentation. Vous n'avez pas à correspondre à des accolades en Python, mais vous ne correspondre à des niveaux d'indentation.
La meilleure façon de prévenir l'espace/onglet problèmes d'affichage des caractères invisibles dans votre éditeur de texte. Cela vous donnera un moyen rapide pour prévenir et/ou résoudre indentation erreurs liées au.
Aussi, l'injection de copie-collé de code est une source commune pour ce type de problème.
Si vous utilisez notepad++, faire un "remplacer" avec extended mode de recherche pour trouver les \t et de le remplacer avec quatre espaces.
pour l'Atome d'Utilisateurs,
Packages ->whitspace -> remove trailing whitespaces
cela a fonctionné pour moi
Juste un plus. J'ai eu un problème similaire avec les deux indentations dans Notepad++.
Externe Niveau D'Indentation
Aller à l' ----> onglet de Recherche ----> tapez sur remplacer ----> frapper le bouton radio Étendu ci-dessous ---> Maintenant, remplacez \t avec quatre espaces
Aller à l' ----> onglet de Recherche ----> tapez sur remplacer ----> frapper le bouton radio Étendu ci-dessous ---> remplacez Maintenant \n ayant rien
J'ai eu le même problème hier, c'était l'indentation d'erreur, était sublime à l'aide de l'éditeur de texte. pris mes heures à essayer de la réparer, et à la fin j'ai fini par copier le code dans l'éditeur de texte VI et il a bien fonctionné. ps python est trop d'espaces sensibles, assurez-vous de ne pas mélanger de l'espace et tabulation.
Depuis que j'ai réaliser il n'y a pas de réponse spécifique à
spyder
,je vais ajouter un:Fondamentalement, regarder attentivement votre
if
déclaration et assurez-vous que tous lesif
,elif
etelse
ont le même espacement que c'est qu'ils sont dans la même ligne au début de la sorte:J'avais une fonction définie, mais il n'a pas eu tout contenu en dehors de sa fonction de commentaires...
Il a crié :
(à noter que la ligne de la
^
marquer le plus de points à vide)--
Plusieurs solutions:
1: Juste un commentaire la fonction
2: la fonction d'Ajout de commentaire
3: Ajoutez la ligne qui n'a rien
Dans tous les cas, assurez-vous de à l'évidence pourquoi il est vide, la fonction pour vous-même ou pour un de vos pairs qui va utiliser votre code
J'ai été en utilisant Jupyter portable et essayé presque toutes les solutions ci-dessus (l'adaptation à mon scénario) à la non-utilisation. Ensuite, je suis allé, ligne par ligne, de supprimer tous les espaces pour chaque ligne et remplacé par onglet. Qui a résolu le problème.
Tout d'abord, juste pour vous rappeler, il y a une erreur de logique, vous mieux de garder résultat=1, ou autre, votre sortie sera le résultat=0, même après que la boucle s'exécute.
Deuxièmement, vous pouvez l'écrire comme ceci:
En laissant une ligne de dire le python shell que le POUR les états ont pris fin. Si vous avez de l'expérience à l'aide de l'interface python alors vous pouvez comprendre pourquoi nous devons laisser une ligne.
Pour ce que sa vaut le coup, mon docstring était en retrait trop et cela jette aussi la même erreur
IndentationError: unindent does not match any outer indentation level
Il pourrait être parce que la fonction ci-dessus, il n'est pas en retrait de la même façon.
c'est à dire
C'est parce qu'il est un mélange de deux tabulations et des espaces.
Vous pouvez supprimer tous les espaces et de les remplacer avec des onglets.
Ou,
Essayez d'écrire ceci:
au début du code. Cette ligne résout toutes les différences entre les tabulations et des espaces.
dans mon cas, le problème est la configuration de pydev sur Eclipse
Si vous utilisez l'éditeur Komodo vous pouvez le faire comme il l'indique dans l'un de des messages d'erreur similaires:
1) tout sélectionner, par exemple, Ctrl + A
2) Aller à Code -> Untabify Région
3) vérifiez vos indentation est toujours correct, enregistrez et exécutez à nouveau le programme.
Je suis à l'aide de Python 3.4.2
Si vous utilisez Sublime text pour python de développement,vous pouvez éviter l'erreur en utilisant le package de l'Anaconda.Après l'installation Anaconda,
À l'ide, avec plugin python, Ctrl + Maj + Alt pour reformater le document fixe le tiret/onglet/espaces problème
Pour SPYDER utilisateurs: je suis en utilisant spyder 3.3.2 avec python 3.7.1 et j'ai résolu ce problème, réglage en retrait pour l'utilisation des onglets, avec les étapes suivantes, cliquez sur:
Puis-je réinitialiser le "unidented" ligne à l'aide de la touche de tabulation.
Pour une raison quelconque, sans ce paramètre, j'ai eu l' fantôme IndentationError parfois.
Cela se produit principalement en raison de l'éditeur .Essayez de modifier les tabulations en espaces(4).le meilleur environnement de développement python ou les Rédacteurs sont pycharm ,sublime ,vim pour linux.
même moi aussi j'avais rencontré le même problème , j'ai su plus tard qu'il y a un problème de codage .je suggère u trop de changement ur de l'éditeur.