Python Twitter Bot 主文件不是 运行 所有功能

Python Twitter Bot Main Files not running all functions

我在大学的黑客马拉松期间与一群朋友一起创建了一个自动 Twitter 机器人。作为一名新的 Python 开发人员,我遇到了一个问题,即我的驱动程序代码的某些功能无法实现并且永远不会 运行。就在那时我想起 Python 有一个解释器编译器。

我们创建了一个包含所有机器人功能的文件夹,然后在我们的主文件中调用了所有所述功能。我们的主文件代码如下所示:

from bot_functions.get_quote import quote_on_enable
from bot_functions.reply import reply_on_enable
from bot_functions.retweet import retweet_on_enable

while True:
    quote_on_enable() # Always runs
    reply_on_enable() # Sometimes runs
    retweet_on_enable() # Code cannot be reached.

我们的一些函数代码示例(函数都在单独的文件中,但共享同一个文件夹:

def quote_on_enable(): # Purpose to run code infinitely.
    while True:
        try:
            quote = get_quote() # Uses helper function above.
            tweet = "..." + "\n\n" + "Komi-Translation: " + "\n" + quote
            print('\n Tweeting: ' + '\n' + tweet)
            api.update_status(tweet) # Actually tweeting
            print("Next quote in 10 seconds.")
            time.sleep(10) # Halts the loop for 'x' amount of time
        except Exception as error:
            print(error)
            break

def reply_on_enable():
    bot_id = int(api.verify_credentials().id_str)
    mention_id = 1

    message = "@{} ..."

    while True:
        mentions = api.mentions_timeline(since_id=mention_id) # Finding mention tweets
        for mention in mentions:
            print("Mention tweet found")
            print(f"{mention.author.screen_name} - {mention.text}")
            mention_id = mention.id
            # Checking if the mention tweet is not a reply, we are not the author, and
            # that the mention tweet contains one of the words in our 'words' list
            # so that we can determine if the tweet might be a question.
            if mention.in_reply_to_status_id is None and mention.author.id != bot_id:
                    try:
                        print("Attempting to reply...")
                        api.update_status(message.format(mention.author.screen_name), in_reply_to_status_id
id_str, auto_populate_reply_metadata = True)
                        print("Successfully replied :)")
                    except Exception as exc:
                        print(exc)
        time.sleep(15) # The bot will only check for mentions every 15 seconds, unless you tweak this value

我相信既然我们所有的函数都在调用while True,我们就永远离不开函数调用了。我应该如何解决这个问题?我是否有可能保持我现在使用的格式,或者我最终必须将所有功能都扔到主文件中?谢谢!我

问题与您的函数所在的文件无关。

您首先调用了 quote_on_enable 函数,并且由于内部有 while True: 循环,您会留在内部直到捕获到异常(因为在这种情况下,您正在调用 break).

所以你只在它发生时才调用你的第二个函数 reply_on_enable。一旦你到了那里,你就会被困在里面,因为没有办法摆脱它的无限 while True: 循环。

这就是为什么你的第三个功能永远不会达到。

通过删除我所有的函数 While True: 循环以及向所有适当位置添加异常,我已经解决了这个问题。