Lorsque je compile le code Python ci-dessous, j'obtiens
IndentationError: unindent ne correspond à aucun niveau d'indentation externe
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?
python
indentation
cbrulak
la source
la source
View > Indentation > Intent Using Spaces
Réponses:
D'autres affiches sont probablement correctes ... il peut y avoir des espaces mélangés avec vos onglets. Essayez de faire une recherche et de remplacer pour remplacer tous les onglets par quelques espaces.
Essaye ça:
la source
IMPORTANT : Les espaces sont la méthode préférée - voir PEP008 Indentation et onglets ou espaces? . (Merci à @Siha pour cela.)
Pour les
Sublime Text
utilisateurs:Réglez
Sublime Text
pour utiliser des onglets pour l'indentation:View
->Indentation
->Convert Indentation to Tabs
Décochez également l'
Indent Using Spaces
option dans le même sous-menu ci-dessus. Cela résoudra immédiatement ce problème.la source
Pour vérifier facilement les problèmes avec les tabulations / espaces, vous pouvez réellement faire ceci:
ou vous pouvez simplement configurer correctement votre éditeur :-)
la source
Êtes-vous sûr de ne pas mélanger les tabulations et les espaces dans votre espace blanc d'indentation? (Cela provoquera cette erreur.)
Remarque, il est recommandé de ne pas utiliser d'onglets dans le code Python. Voir le guide de style . Vous devez configurer Notepad ++ pour insérer des espaces pour les tabulations.
la source
Chaque fois que j'ai rencontré cette erreur, c'est parce que j'ai en quelque sorte mélangé les tabulations et les espaces dans mon éditeur.
la source
Si vous utilisez l'éditeur IDLE de Python, vous pouvez faire ce qu'il suggère dans l'un des messages d'erreur similaires:
1) sélectionnez tout, par exemple Ctrl+A
2) Allez dans Format -> Untabify Region
3) Vérifiez que votre retrait est toujours correct, enregistrez et réexécutez votre programme.
J'utilise Python 2.5.4
la source
Si vous utilisez Vim, appuyez sur Échap, puis tapez
gg = G
Cette auto met tout en retrait et effacera tous les espaces dans lesquels vous avez jeté.
la source
La ligne:
result = result * i
doit être en retrait (c'est le corps de la boucle for).Ou - vous avez des espaces et des tabulations mixtes
la source
Sur Atom
aller à
Vérifiez ensuite à nouveau l'indentation de votre fichier:
ou
la source
Semble être un problème d'indentation. Vous ne devez pas correspondre accolades en Python , mais vous ne devez faire correspondre les niveaux d'indentation.
La meilleure façon d'éviter les problèmes d'espace / tabulation est d'afficher 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.
De plus, l'injection de code copié-collé est une source courante pour ce type de problème.
la source
Si vous utilisez notepad ++, effectuez un "remplacement" avec le mode de recherche étendue pour trouver \ t et remplacez par quatre espaces.
la source
pour les utilisateurs d'Atom,
Packages ->whitspace -> remove trailing whitespaces
cela a fonctionné pour moila source
Juste un ajout. J'ai eu un problème similaire avec les deux indentations dans Notepad ++.
Niveau d'indentation externe
Allez dans ----> onglet Rechercher ----> appuyez sur remplacer ----> appuyez sur le bouton radio Étendu ci-dessous ---> Remplacez maintenant \ t par quatre espaces
Allez dans ----> onglet Rechercher ----> appuyez sur remplacer ----> appuyez sur le bouton radio Étendu ci-dessous ---> Remplacez maintenant \ n par rien
la source
J'utilisais le bloc-notes Jupyter et j'ai essayé presque toutes les solutions ci-dessus (en m'adaptant à mon scénario) en vain. Je suis ensuite allé ligne par ligne, supprimé tous les espaces pour chaque ligne et remplacé par tab. Cela a résolu le problème.
la source
Pour les utilisateurs de Spyder, accédez à Source> Fix Indentation pour résoudre le problème immédiatement
la source
Cela pourrait être dû au fait que la fonction au-dessus n'est pas en retrait de la même manière. c'est à dire
la source
J'ai eu le même problème hier, c'était une erreur d'indentation, j'utilisais un éditeur de texte sublime. a pris mes heures à essayer de le réparer et à la fin j'ai fini par copier le code dans l'éditeur de texte VI et cela a bien fonctionné. ps python est trop sensible aux espaces, assurez-vous de ne pas mélanger espace et tabulation.
la source
Comme je me rends compte qu'il n'y a pas de réponse spécifique à
spyder
, j'en ajouterai une: Fondamentalement, regardez attentivement votreif
déclaration et assurez-vous que toutif
,elif
etelse
ayez le même espacement, c'est-à-dire qu'ils sont sur la même ligne au début, comme suit:la source
J'avais une fonction définie, mais elle n'avait pas de contenu en dehors de ses commentaires de fonction ...
Il a crié:
(notez que la ligne vers laquelle la
^
marque pointe est vide)-
Solutions multiples:
1: Il suffit de commenter la fonction
2: Ajouter un commentaire de fonction
3: ajouter une ligne qui ne fait rien
Dans tous les cas, assurez-vous de faire comprendre pourquoi il s'agit d'une fonction vide - pour vous-même ou pour vos pairs qui utiliseront votre code
la source
Tout d'abord, juste pour vous rappeler qu'il y a une erreur logique, vous feriez mieux de garder result = 1 ou bien votre sortie sera result = 0 même après l'exécution de la boucle.
Deuxièmement, vous pouvez l'écrire comme ceci:
Laisser une ligne indiquera au shell python que les instructions FOR sont terminées. Si vous avez de l'expérience avec le shell python, vous pouvez comprendre pourquoi nous devons laisser une ligne.
la source
Pour ce que ça vaut, ma docstring était trop en retrait et cela génère également la même erreur
IndentationError: unindent does not match any outer indentation level
la source
En effet, il y a un mélange d'onglets et d'espaces. Vous pouvez soit supprimer tous les espaces et les remplacer par des tabulations.
Ou, essayez d'écrire ceci:
au début du code. Cette ligne résout toutes les différences entre les tabulations et les espaces.
la source
dans mon cas, le problème était la configuration de pydev sur Eclipse
la source
Si vous utilisez l'éditeur Komodo, vous pouvez faire ce qu'il suggère dans l'un des messages d'erreur similaires:
1) sélectionnez tout, par exemple Ctrl + A
2) Allez dans Code -> Untabify Region
3) Vérifiez que votre retrait est toujours correct, enregistrez et réexécutez votre programme.
J'utilise Python 3.4.2
la source
Si vous utilisez du texte Sublime pour le développement de python, vous pouvez éviter l'erreur en utilisant le package Anaconda. Après avoir installé Anaconda,
la source
Dans intellij avec le plugin python, Ctrl + Shift + Alt pour reformater le document a corrigé le problème de retrait / tabulation / espaces
la source
Pour les utilisateurs de SPYDER : J'utilise spyder 3.3.2 avec python 3.7.1 et j'ai résolu cela, définissant l'indentation pour utiliser des onglets, avec les étapes suivantes, cliquez sur:
Ensuite, je réinitialise la ligne "non identifié" à l'aide de la touche de tabulation.
Pour une raison quelconque, sans ce paramètre, j'ai parfois le fantôme IndentationError.
la source
Par exemple:
Dans ce code, la même situation s'est produite pour moi. Supprimez simplement les espaces de retrait précédents des lignes 2 et 3, puis utilisez la tabulation ou l'espace. N'utilisez jamais les deux . Donnez une indentation appropriée lors de l'écriture de code en python. Pour Spyder goto Source> Fix Indentation. Il en va de même pour le code VC et le texte sublime ou tout autre éditeur. Corrigez l'indentation.
la source
Cela se produit principalement à cause de l'éditeur .Essayez de changer les onglets en espaces (4) .Les meilleurs IDE ou éditeurs compatibles python sont pycharm, sublime, vim pour linux.
Même moi aussi, j'avais rencontré le même problème, plus tard, j'ai trouvé qu'il y avait un problème d'encodage. Je vous suggère de changer trop d'éditeur.
la source