我正在为我的 willie irc 机器人做一个模块,它使机器人在论坛的给定线程中出现新帖子时发出一条消息。实际上,我遇到的问题很奇怪:机器人每隔一段时间就会返回一个未处理的异常:
Unhandled exception in thread started by <function lurk at 0x10ebfa8c0>
Traceback (most recent call last):
line 27, in lurk
d=c.entries[0].published
IndexError: list index out of range
每隔一段时间,我的意思就是:错误是随机出现的。通常大约 30 分钟,但在整个 1.5 小时的会话中根本没有出现。我对如何处理这个问题有一些想法,但让我们先看一下我的代码:
import willie
import time
import thread
import feedparser
...
@willie.module.commands('startlurking')
def startlurking(bot, trigger):
def lurk():
bot.say("Right away, sir.")
a=feedparser.parse('http://forums.wesnoth.org/feed.php?t=39175')
b=a.entries[0].published
while True:
c=feedparser.parse('http://forums.wesnoth.org/feed.php?t=39175')
d=c.entries[0].published #this is the line 27
if not d==b:
bot.say(trigger.nick + ", I have spotted a new post!")
bot.say(c.entries[0].link)
bot.say(c.entries[0].description)
b=d
time.sleep(10)
thread.start_new_thread(lurk, ())
我的第一个想法是 10 秒的睡眠时间不足以让我的机器人解析 rss。这里有没有人从他们的经验中知道什么时间是 100% 安全的?
第二个想法是忽略错误并产生一个不做任何事情的异常,不中断循环,只是重试整个事情。这行得通吗?
try:
#here goes the while loop
except:
Pass
您认为哪个选项更好?我想最终以“专业”的方式开始编码,而不是让菜鸟变通。如果你有自己的想法,请说出来。
谢谢!