Python返回"无"防止跟随循环

时间:2017-07-10 17:43:51

标签: python for-loop if-statement tweepy

我使用Tweepy来传输推文。我试图使用json文件中的retweeted_status标识符过滤掉转发的内容。 我希望for循环在它之前的行返回空后执行,但它似乎没有工作 - 没有打印出来。该脚本似乎在if语句之后停止:

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

2 个答案:

答案 0 :(得分:1)

如果on_status方法中的新数据包含您想要的内容,则应该调用另一个函数。没有必要在on_status方法内继续,因为它不是for循环,除非你创建自己的for循环并决定继续基于你自己的自定义业务逻辑。

Tweepy库在您的自定义StreamListener中调用了一个名为on_data的继承(StreamListener)方法。您唯一负责的是使用该数据做某事。

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 :(得分:0)

而不是使用return(它将完全退出你的函数),你只想继续进行for循环的下一次迭代而不打印。虽然为了理所当然,你的if语句应该在for循环中。

return替换为continue,它应该效果很好。 continue跳过for循环的其余部分并从下一个值开始。

如果您希望在for循环之前打印出一个空行,请将return替换为print(),而这将替代。