IndentationError: unindent ne correspond à aucun niveau d'indentation externe
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 = 0
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
pourquoi?
20 réponses
D'autres affiches sont probablement correctes...il pourrait y avoir des espaces mélangés avec vos onglets. Essayez de faire une recherche & remplacer pour remplacer tous les onglets avec quelques espaces.
essayez ceci:
import sys
def Factorial(n): # return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
print Factorial(10)
IMPORTANT : Espaces sont la méthode préférée - voir PEP008 Indentation et des Tabulations ou des Espaces? . (Merci à @Siha pour cela.)
pour Sublime Text
utilisateurs:
Set Sublime Text
pour utiliser les tabulations pour l'indentation:
View
--> Indentation
--> Convert Indentation to Tabs
Décochez la case Indent Using Spaces
option ainsi dans le même sous-menu ci-dessus.
Cela résoudra immédiatement ce problème.
pour vérifier facilement les problèmes avec les onglets / espaces vous pouvez réellement faire ceci:
python -m tabnanny yourfile.py
ou vous pouvez configurer votre éditeur correctement bien sûr: -)
êtes-vous sûr de ne pas mélanger les onglets et les espaces dans votre espace blanc d'indentation? (Qui sera la cause de l'erreur.)
Note, il est recommandé de ne pas utiliser d'onglets en code Python. Voir le guide de style . Vous devez configurer le bloc-notes++ pour insérer des espaces pour les onglets.
chaque fois que j'ai rencontré cette erreur, c'est parce que j'ai d'une manière ou d'une autre mélangé des onglets et des espaces dans mon éditeur.
si vous utilisez L'éditeur IDLE de Python, vous pouvez faire ce qu'il suggère dans un message d'erreur similaire:
1) Sélectionner tous, p.ex. Ctrl + A
2) Aller au Format - > Untabify Region
3) Vérifiez que votre indentation est toujours correcte, Enregistrez et relancez votre programme.
j'utilise Python 2.5.4
la ligne result = result * i
doit être indentée (c'est le corps de la boucle).
Ou - vous avez mélangé les espaces et les tabulations
si vous utilisez Vim, tapez escape et tapez
gg=G
cette auto indente tout et nettoie tous les espaces que vous avez jetés.
Semble être un problème d'indentation. Vous n'avez pas à faire correspondre les crochets curly en Python mais vous do devez faire correspondre les 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 de prévenir et/ou de résoudre les erreurs liées à l'indentation.
en outre, l'injection de code copié-collé est une source commune pour ce type de problème.
si vous utilisez le bloc-notes++, faites un" replace " avec le mode de recherche étendu pour trouver \t et remplacez par quatre espaces.
Sur Atome
passez à
Packages > Whitespace > Convert Spaces to Tabs
puis vérifiez à nouveau votre indentation de fichier:
python -m tabnanny yourFile.py
ou
>python
>>> help("yourFile.py")
pour les utilisateurs atomiques, Packages ->whitspace -> remove trailing whitespaces
cela a fonctionné pour moi
j'ai eu le même numéro hier, c'était une erreur d'indentation, j'ai utilisé l'éditeur de texte sublime. ça m'a pris des heures à essayer de le réparer et à la fin j'ai fini par copier le code dans vi text editor et ça a bien marché. ps python est trop sensible aux espaces, assurez-vous de ne pas mélanger l'espace et l'onglet.
juste un ajout. J'ai eu un problème similaire avec les deux indentations dans Notepad++.
- indentation Non écartée
-
Niveau D'Indentation Extérieure
passer à - - - - > onglet Recherche - - - - > appuyer sur remplacer - - - > appuyer sur le bouton radio prolongé ci-dessous - - - > remplacer \t par quatre espaces
Aller à l' ----> onglet de Recherche ----> appuyez sur remplacer - - - - > appuyez sur le bouton radio Extended ci-dessous - - - > remplacer maintenant \n Par rien
peut-être parce que la fonction au-dessus n'est pas découpée de la même façon. c'est à dire
class a:
def blah:
print("Hello world")
def blah1:
print("Hello world")
c'est parce qu'il y a un mélange d'onglets et d'espaces. Vous pouvez soit supprimer tous les espaces et les remplacer par des onglets.
ou, Essayez d'écrire ceci:
#!/usr/bin/python -tt
au début du code. Cette ligne résout les différences entre les onglets et les espaces.
dans mon cas, le problème était la configuration de pydev sur Eclipse
si vous utilisez Komodo editor vous pouvez faire comme il suggère dans l'un des messages d'erreur similaires:
1) Sélectionner tous, p.ex. Ctrl + A
2) Passer à Code - > Untabify Region
3) Vérifiez que votre indentation est toujours correcte, Enregistrez et relancez votre programme.
j'utilise Python 3.4.2
si vous utilisez Sublime text pour le développement de python,vous pouvez éviter l'erreur en utilisant le paquet Anaconda.Après avoir installé Anaconda,
- ouvrir votre fichier dans sublime
- clic droit sur les espaces ouverts
- choisir anaconda
- cliquez sur autoformat
- DONE Or Press CTRL+ALT+R.
même moi aussi j'avais rencontré le même problème , plus tard j'ai trouvé qu'il y a un problème d'encodage .je suggère u trop de changement ur de l'éditeur. les meilleurs IDE ou éditeurs python sont PyCharm, sublime, vim pour linux.