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?

403
demandé sur Peter Mortensen 2009-01-29 19:34:46

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)
472
répondu Kevin Tighe 2017-01-27 15:05:40

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.

190
répondu activatedgeek 2016-01-09 06:54:12

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: -)

119
répondu André 2009-02-04 21:50:28

ê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.

33
répondu zdan 2011-08-25 20:02:47

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.

15
répondu Dana 2009-01-29 16:45:19

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

9
répondu Gatica 2013-06-13 15:26:00

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

7
répondu Abgan 2009-01-29 16:38:04

si vous utilisez Vim, tapez escape et tapez

gg=G

cette auto indente tout et nettoie tous les espaces que vous avez jetés.

6
répondu cbartondock 2015-05-07 09:43:20

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.

4
répondu Matt Kahl 2012-07-31 20:27:51

si vous utilisez le bloc-notes++, faites un" replace " avec le mode de recherche étendu pour trouver \t et remplacez par quatre espaces.

4
répondu Jackie Lee 2014-03-20 17:23:01

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")
4
répondu loretoparisi 2015-03-11 14:27:23

pour les utilisateurs atomiques, Packages ->whitspace -> remove trailing whitespaces cela a fonctionné pour moi

2
répondu Aha 2015-07-28 12:41:15

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.

1
répondu user3731311 2014-06-26 15:57:37

juste un ajout. J'ai eu un problème similaire avec les deux indentations dans Notepad++.

  1. indentation Non écartée
  2. 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

1
répondu JumpMan 2015-11-12 21:42:44

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")
0
répondu Ali 2014-02-14 02:52:13

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.

0
répondu Eragon 2014-03-05 13:43:15

dans mon cas, le problème était la configuration de pydev sur Eclipse

pydev @ Eclipse

0
répondu Rui Martins 2014-03-08 11:13:10

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

0
répondu Imtiaz Pabel 2014-12-02 19:47:04

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,

  1. ouvrir votre fichier dans sublime
  2. clic droit sur les espaces ouverts
  3. choisir anaconda
  4. cliquez sur autoformat
  5. DONE Or Press CTRL+ALT+R.
0
répondu Kapilfreeman 2015-12-27 01:39:57

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.

-3
répondu yunus 2018-01-29 03:53:33