Python“while true”循环不会结束(使用Python Tweepy)

问题描述:

下面的代码似乎主要是“工作”。这意味着它会在特定的一天中从Twitter API中删除所有推文。虽然它似乎是真正的循环不断,而我没有看到预期的“成品!!”字符串即使通过csv文件也是完整的。Python“while true”循环不会结束(使用Python Tweepy)

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!!!" 
+0

如果它永远不会创建一个异常它永远不会结束循环 – user28470 2014-10-07 09:43:11

StopIteration从未在您的代码中引发。如果for声明被tweepy.Cursor().items()所提出,则它会被捕获,则不会被进一步传播。

刚打出来,如果for循环结束:

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

     # completed iterating successfully 
     break 

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

您的代码没有退出条件。 看来你不想退出循环,如果你有错误抛出。所以我认为当你到达尽头时你想退出,是的?

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