2017-07-10 72 views
0

我正在使用Tweepy來推送推文。我試圖在json文件中使用retweeted_status標識符過濾出轉發的內容。 我希望for循環在它之前的空行返回之後執行,但它似乎不起作用 - 沒有任何內容被打印出來。該腳本似乎if語句後停止:Python返回「無」阻止循環

class StreamListener(tweepy.StreamListener): 


     def on_status(self, status): 
       #these variable split out the data from the outputted json 
       text = status.text 
       name = status.user.screen_name 
       id_str = status.id_str 

#This if argument ensures that if there is retweeted status then None is returned 
       if hasattr (status, 'retweeted_status'): 
         return 
       for url in status.entities['urls']: 

         print (text, name, (url['expanded_url']), file=open("results.txt", "a")) 
+7

「我希望for循環執行」和「return語句」不要放在同一句子中。 –

+0

您是否試圖返回for循環應該打印的文本? if語句的意圖是什麼? –

回答

1

如果on_status方法中的新數據包含您想要的內容,那麼您應該可能調用另一個函數。在on_status方法中不需要繼續執行,因爲它不是for循環,除非您創建自己的循環並根據自己的自定義業務邏輯決定繼續。

在引擎蓋下Tweepy庫正在調用從您的自定義StreamListener繼承的(StreamListener)方法on_data。你負責的唯一的事情就是用這些數據做一些事情。

def handle_status_update(status): 
    # Handle your custom stuff in here... 
    text = status.text 
    name = status.user.screen_name 
    id_str = status.id_str 

    for url in status.entities['urls']: 
     print (text, name, (url['expanded_url']), file=open("results.txt", "a")) 


class StreamListener(tweepy.StreamListener): 


     def on_status(self, status): 
      # if not retweeted 
      if not hasattr (status, 'retweeted_status'): 
       handle_status_update(status) 
+1

歡呼聲工作 – nmh

0

而不是使用回(這將徹底退出你的函數),你只想去到for循環的下一次迭代不打印的。儘管爲了使它有意義,你的if語句應該放在for循環中。

return替換爲continue它應該很好。 continue跳過for循環的其餘部分並開始下一個值。

如果您希望在for循環之前打印出一條空行,請將return替換爲print(),那樣會發生這種情況。

+0

我越來越SyntaxError:'繼續'不正確在循環 – nmh

+0

@nmh這是因爲你不在一個循環。 –

+0

@nmh這就是爲什麼我給了第二個在for循環之前打印空行的例子,以防你不想讓if語句進入for循環。你期望回報在那裏做什麼? –