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:
循环以及向所有适当位置添加异常,我已经解决了这个问题。
我在大学的黑客马拉松期间与一群朋友一起创建了一个自动 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:
循环以及向所有适当位置添加异常,我已经解决了这个问题。