0

I am currently trying to stream tweets for a project using Python, Elasticsearch and Kibana.

While running my Python script, I have an IndentationError and I don't understand why, can anyone help me through this problem ?

Thanks in advance.

My Python script :

import json
import tweepy
import textblob
import elasticsearch
from tweepy import OAuthHandler, Stream
from tweepy.streaming import StreamListener
from textblob import TextBlob
from elasticsearch import Elasticsearch
consumer_key = '...'
consumer_secret = '...'
access_token = '...'
access_token_secret = '...'
elastic_search = Elasticsearch()
class MyStreamListener(StreamListener):
 def on_data(self, data):
 dict_data = json.loads(data)
 tweet = TextBlob(dict_data["text"])
 print(tweet.sentiment.polarity)
 if tweet.sentiment.polarity < 0:
 sentiment = "negative"
 elif tweet.sentiment.polarity == 0:
 sentiment = "neutral"
 else:
 sentiment = "positive"
 print(sentiment)
 elastic_search.index(index="sentiment",
 doc_type="test-type",
 body={"author": dict_data["user"]["screen_name"],
 "date": dict_data["created_at"],
 "message": dict_data["text"],
 "polarity": tweet.sentiment.polarity,
 "subjectivity": tweet.sentiment.subjectivity,
 "sentiment": sentiment})
 return True
 def on_failure(self, status):
 print(status)
if __name__ == '__main__':
 listener = MyStreamListener()
 auth = OAuthHandler(consumer_key, consumer_secret)
 auth.set_access_token(access_token, access_token_secret)
 stream = Stream(auth, listener)
 stream.filter(track=['congress'])
# user_choice = input("Please choose a Hashtag... : ")
# retrieve_tweets = api.search(user_choice)

The error message :

File "sentiment.py", line 21
 tweet = TextBlob(dict_data["text"])
 ^
IndentationError: unindent does not match any outer indentation level
Elazar
22k4 gold badges51 silver badges68 bronze badges
asked Nov 1, 2017 at 9:47
10
  • Are you using tabs, by any chance? search and replace \t with 4 spaces everywhere. Commented Nov 1, 2017 at 9:48
  • See for example here Commented Nov 1, 2017 at 9:50
  • Hello @Elazar, I don't use tabs and like you said I used 4 spaces Commented Nov 1, 2017 at 9:51
  • Remove all blank lines? Commented Nov 1, 2017 at 9:54
  • Please make sure (by search/replace) - the question itself seems to contain tabs. Commented Nov 1, 2017 at 9:54

1 Answer 1

3

You do have tabs there.

 def on_data(self, data):
 dict_data = json.loads(data)
# ^ tab and 4 spaces here
 tweet = TextBlob(dict_data["text"])
# ^ 8 spaces here 
 print(tweet.sentiment.polarity)
# ^ ^ two tabs here (equal 16 spaces)

Note that the representation in SO site translates the tabs to spaces, but if you copy the source into a code editor, it reveals the tabs:

indentation

wjandrea
34.1k10 gold badges69 silver badges107 bronze badges
answered Nov 1, 2017 at 10:01
Sign up to request clarification or add additional context in comments.

6 Comments

How can you tell that? When I copy E Ajanthan's text, I get all spaces.
@Elazar Great tip - I'd not figured that one out.
@EAjanthan: That's because you have lots of tabs (on 25 different lines).
How can I see all the tabs using Notepad ?
@EAjanthan Don't use notepad. It's not a code editor. Use Notepad++, VSCode, Atom, Vim or any other code editor. Also, execute your code using python -tt <myfile>
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.