【问题标题】:Python "while true" loop does NOT end (using Python Tweepy)Python“while true”循环没有结束(使用 Python Tweepy)
【发布时间】:2014-12-01 16:56:28
【问题描述】:

以下代码似乎大部分都在“工作”。这意味着它会从 Twitter API 中抓取指定日期的所有推文。虽然似乎 while True 循环从未中断,但我没有看到预期的“完成!!”字符串即使通过csv文件也是完整的。

import tweepy
import time
import csv

ckey = "xxx"
csecret = "xxx"
atoken = "xxx-xxx"
asecret = "xxx"

OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret,
    'access_token_key':atoken, 'access_token_secret':asecret}
auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret'])
api = tweepy.API(auth)

startSince = '2014-10-03'
endUntil = '2014-10-04'
suffix = '_03OCT2014.csv'

searchTerms = 'xyz'

tweets = tweepy.Cursor(api.search, q=searchTerms,
    since=startSince, until=endUntil).items()

while True:
    try: 
        for tweet in tweets:

            placeHolder = []
            placeHolder.append(tweet.author.name.encode('utf8'))
            placeHolder.append(tweet.author.screen_name.encode('utf8'))
            placeHolder.append(tweet.created_at)

            prefix = 'TweetData_xyz'
            wholeFileName = prefix + suffix     
            with open(wholeFileName, "ab") as f:
                writeFile = csv.writer(f)
                writeFile.writerow(placeHolder)

    except tweepy.TweepError:
        time.sleep(60*15)
        continue

    except IOError:
        time.sleep(60*5)
        continue

    except StopIteration:
        break

print "Finished!!!"

【问题讨论】:

  • 如果它从不创建异常,它将永远不会结束循环

标签: python python-2.7 twitter tweepy


【解决方案1】:

StopIteration 永远不会在您的代码中引发。如果tweepy.Cursor().items() 提出for 语句,它将捕获它,它不会 进一步传播。

如果for 循环结束,就退出:

while True:
    try:
        for tweet in tweets:
            # do stuff

        # completed iterating successfully
        break

并完全删除 except StopIteration: 处理程序。

【讨论】:

    【解决方案2】:

    您的代码没有退出条件。 如果抛出错误,您似乎不想退出该循环。所以我假设当你到达 end ob 你的 while 身体时,你想退出,是吗?

    def process_tweet(tweet):
    
        placeHolder = []
        placeHolder.append(tweet.author.name.encode('utf8'))
        placeHolder.append(tweet.author.screen_name.encode('utf8'))
        placeHolder.append(tweet.created_at)
    
        prefix = 'TweetData_xyz'
        wholeFileName = prefix + suffix     
        with open(wholeFileName, "ab") as f:
           writeFile = csv.writer(f)
           writeFile.writerow(placeHolder)
    
    while True:
        try: 
            for tweet in tweets:
                process_tweet(tweet)
            break
        except tweepy.TweepError:
            time.sleep(60*15)
            continue
    
        except IOError:
            time.sleep(60*5)
            continue
    
        except StopIteration:
            break
    
    print "Finished!!!"
    

    【讨论】:

      猜你喜欢
      • 2017-04-03
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 2022-11-23
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多