簡體   English   中英

在循環中打破循環並在python中重新啟動腳本

[英]breaking out of loop in loop and restarting script in python

這是我的twitterbot腳本。 它基於關鍵字進行搜索,然后轉發包含關鍵字的推文。 我需要打破此循環循環,並在出現錯誤代碼的情況下重新啟動腳本:

    for row in retweeted_id:
        try:
            print(row)
            twitter.api.retweet(row)

            time.sleep(180)
        except tweepy.TweepError, e:
            if e == "[{u'message': u'You have already retweeted this tweet.', u'code': 327}]":
                print(e)
                break                    
            elif e == "[{u'message': u'Rate limit exceeded', u'code': 88}]":
                print(e)
                time.sleep(60*5)
            elif e == "[{u'message': u'User is over daily status update limit.', u'code': 185}]":
                 print(e)
                 break


            else:
                print(e)

我試着做:

else:`
    continue
break

而且我還嘗試將整個腳本放入函數中,但是我沒有足夠的經驗來編寫函數中的類/函數。 在出現錯誤327的情況下,我想從頂部重新啟動腳本。非常感謝您的幫助!

這是整個腳本:

import time
retweeted_id = []
tweet_text = []
tweet_text_id = []
from TwitterSearch import TwitterSearchOrder, TwitterUserOrder, TwitterSearchException, TwitterSearch

try:
    tso = TwitterSearchOrder() 
    tso.set_keywords([""]) 

    tso.set_language('nl')
    tso.set_include_entities(False) 
    tso.set_result_type('recent')

    ts = TwitterSearch(
        consumer_key = "aaaa",
        consumer_secret = "bbbb",
        access_token = "cccc",
        access_token_secret = "dddd"
                        )
    for retweeted in ts.search_tweets_iterable(tso):
        tweet_text_id.append({retweeted['id'], retweeted['user']['screen_name'] })
        retweeted_id.append(retweeted['id'])
    print('done')

    import tweepy
    class TwitterAPI:
        def __init__(self):
            consumer_key = "aaaa"
            consumer_secret = "bbbb"
            auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
            access_token = "cccc"
            access_token_secret = "dddd"
            auth.set_access_token(access_token, access_token_secret)
            self.api = tweepy.API(auth)

        def tweet(self, message):
            self.api.update_status(status=message)

    if __name__ == "__main__":
        twitter = TwitterAPI()

        for row in retweeted_id:
            try:
                print(row)
                twitter.api.retweet(row)

                time.sleep(180)
            except tweepy.TweepError, e:
                if e == "[{u'message': u'You have already retweeted this tweet.', u'code': 327}]":
                    print(e)
                    break                    
                elif e == "[{u'message': u'Rate limit exceeded', u'code': 88}]":
                    print(e)
                    time.sleep(60*5)
                elif e == "[{u'message': u'User is over daily status update limit.', u'code': 185}]":
                     print(e)
                     break

except TwitterSearchException as e:
    print(e)

如果我正確理解您想要的內容,則以這種方式進行重組可能是最簡單的答案(最好是避免使用全局變量)。

<imports>

<globals from init>

def init():
    <your init stuff>

class TwitterAPI:
    <...>

def twit():
    twitter = TwitterAPI()
    for row in retweeted_id:
        <rest of loop>

def main():
    init();
    while (True):
        try:
            twit();
        except TwitterSearchException as e:
            print(e)

if __name__ == "__main__":
    main();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM