web-dev-qa-db-fra.com

Python IndentationError unindent ne correspond à aucun niveau d'indentation externe

Je suis débutant dans python

J'ai cette erreur:

Error : 
def on_data(self,data):
                      ^
IdentationError : unindent does not match any outer indentation level

Je code avec notepad++ dans windows 8.1. Je ne comprends pas pourquoi j'ai cette erreur, j'ai fait attention aux onglets et à l'espace.

Je veux sauvegarder des données dans self.file

Voici mon code:

from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
from tweepy import Stream
import tweepy
import time



class StdOutListener(StreamListener):

    def __init__(self,file):
        self.file = file

    def on_data(self, data):

        print data
        self.file.write(data)
        return True

    def on_error(self, status):
        print status


def main() :
    file = open('work.txt','w')
    listn = StdOutListener(file)
    consumer_key=""
    consumer_secret=""

    access_token=""
    access_token_secret=""

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    #api = tweepy.API(auth)

    #filename=open('helloworld.txt','r')
    #f=filename.readlines()
    #filename.close()

    #for line in f:
    #   api.update_status(line)

    stream = Stream(auth, listn)
    stream.filter(track=['lol'])
    file.close()
7
papiyoyo

Vous mélangez des onglets et des espaces. Ne fais pas ça. Plus précisément, le corps de la fonction __init__ est indenté avec des onglets alors que votre méthode on_data ne l’est pas.

Voici une capture d'écran de votre code dans mon éditeur de texte; J'ai réglé la tabulation sur 8 espaces (c'est ce que Python utilise) et sélectionné le texte, ce qui oblige l'éditeur à afficher des tabulations avec des lignes horizontales continues:

highlighted code with tabs shown as lines

Votre éditeur est configuré pour développer des onglets extensibles à la quatrième colonne, de sorte que les méthodes apparaissent pour s'aligner.

Exécutez votre code avec:

python -tt scriptname.py

et réparer toutes les erreurs trouvées. Configurez ensuite votre éditeur pour utiliser uniquement des espaces pour l'indentation; un bon éditeur insérera 4 espaces à chaque fois que vous utiliserez le TAB clé.

25
Martijn Pieters

Sur notepad ++, si vous obtenez cette erreur, ctrl + a, appuyez une fois sur le bouton TAB. Des onglets seront ajoutés partout dans votre code, puis utilisez les touches Maj + tab pour supprimer l’onglet supplémentaire que vous venez d’ajouter. Il va changer tous vos "onglets" à 4 espaces. Bien sûr, allez dans Paramètres -> Préférences -> Onglet Paramètres -> Remplacer par des espaces. Les futurs onglets seront désormais de 4 espaces.

5
Seraf

J'ai eu le même problème plusieurs fois. C'est arrivé surtout quand j'ai essayé de coller quelques lignes de code à partir d'un éditeur en ligne, les espaces ne sont pas enregistrés correctement en tant que "onglets" ou "espaces". 

Cependant, le correctif était assez simple. Il me suffisait de supprimer l'espacement sur toutes les lignes de code de cet ensemble spécifique et de l'espacer correctement avec les onglets. Cela a résolu mon problème.

2
Aswin
0
Emack333