2016-10-06 4 views
-4

Im очень новые для питона и Im пытается запустить этот сценарий, но получает ошибки отступов в этой части:IndentationError работает питон скрипт

while (time.time()-self.time) < self.limit 

Я попытался удалить все отступы, а затем РЗЭ отступ по-разному но ничего не работает. У кого-нибудь есть идея? Я использую Spyder для запуска этого.

start_time = time.time() #grabs the system time 
keyword_list = ['twitter'] #track list 

from pymongo import MongoClient 
import json 

class listener(StreamListener): 

    def __init__(self, start_time, time_limit=60): 

     self.time = start_time 
     self.limit = time_limit 

def on_data(self, data): 

while (time.time()-self.time) < self.limit: 
    try: 

    client = MongoClient('localhost', 27017) 
    db = client['twitter_db'] 
    collection = db['twitter_collection'] 
    tweet = json.loads(data) 
    collection.insert(tweet) 

    return True 


    except BaseException, e: 
    print 'failed ondata,', str(e) 
    time.sleep(5) 
    pass 

exit() 

def on_error(self, status): 
print statuses 
+1

1) Этот отступ по-прежнему плох. 2) Откуда вы это взяли? '<' не является оператором python –

+0

* «ree-indent по-разному» *? Вы не можете писать код таким образом. Вы должны понимать значение отступов. Прочтите учебник. – zvone

ответ

0

методы вашего класса должны быть отступы под class заявление и тело методов должны быть отступы под def линии. Корпус блоков try и except должен быть отступом под этими инструкциями.

start_time = time.time() #grabs the system time 
keyword_list = ['twitter'] #track list 

from pymongo import MongoClient 
import json 

class listener(StreamListener): 

    def __init__(self, start_time, time_limit=60): 

     self.time = start_time 
     self.limit = time_limit 

    def on_data(self, data): 

     while (time.time()-self.time) < self.limit: 
      try: 
       client = MongoClient('localhost', 27017) 
       db = client['twitter_db'] 
       collection = db['twitter_collection'] 
       tweet = json.loads(data) 
       collection.insert(tweet) 
       return True 

      except BaseException, e: 
       print 'failed ondata,', str(e) 
       time.sleep(5) 
       exit() 

    def on_error(self, status): 
     print statuses 
+0

Спасибо! Это решило проблему с отступом. Однако теперь я получаю синтаксическую ошибку: 'except BaseException, e:' – Strandh

+0

Вероятно, это должно быть 'BaseException as e' - я не пытался обращаться к каким-либо другим ошибкам. – kindall

0

необходимо исправить свой синтаксис для оператора условия while.

во-первых, как некоторые другие упоминали &lt не является оператором python. и вам не нужна точка с запятой. Правильный синтаксис будет while (time.time()-self.time) < self.limit:

Точка с запятой не требуется в любом коде для python. Он находит применение только изредка в конкретных случаях, когда становится легче читать, если несколько операторов находятся на одной строке. Однако эти инструкции не должны содержать такие ключевые слова, как while, if или for и т. Д. На данный момент (пока вы изучаете python) я бы рекомендовал полностью избегать точек с запятой.

И, наконец, (и это может быть неверно форматирование stackOverflow), ваши функции on_data и on_error имеют неправильный отступ. Хорошая практика в python 2.7 и обязательная в 3.x не смешивать вкладки и пробелы (на самом деле просто использовать пробелы), как для правил отступа, см. the official style guide или wikipedia's explanation

+0

Спасибо! Исправлен отступ isse, но теперь я получаю синтаксическую ошибку вместо: 'except BaseException, e:' – Strandh

+0

Синтаксис except is 'except BaseException как e:' Синтаксические ошибки вообще могут быть разрешены путем чтения документов. .. – Aaron

Смежные вопросы