在我正在编写的IRC bot中,有两个函数可以检索发送消息的用户和发送的消息。它通过将发送到bot的读取缓冲行分成两部分来实现,然后使用第二个列表索引来检索用户/消息。以下是代码的第一部分:
def getUser(line):
if "!" in line:
separate = line.split(":", 2)
user = separate[1].split("!", 1)[0]
return user
else:
print "Nothing to receive from the server!"
def getMessage(line):
if ':' in line:
separate = line.split(":", 2)
message = separate[2]
return message
else:
print "Nothing to receive from the server!"
如您所见,我试图形成一种方法,在服务器没有任何可接收的内容时,阻止自己从服务器超时;这就是问题的根源。它将检索一行nothing,然后尝试拆分nothing,然后尝试访问超出范围的列表索引。我有一个想法,这可能可以通过使用try/catch
语句来实现,但是我对Python还不熟悉,对此不太了解。下面是访问函数的其余代码(如果有帮助):
readbuffer = readbuffer + s.recv(1024)
temp = string.split(readbuffer, "\n")
readbuffer = temp.pop()
for line in temp:
user = getUser(line)
message = getMessage(line)
我在message = getMessage(line)
和user = getUser(line)
行上得到了列表索引错误。你知道吗
我认为您的问题在以下几行(除了没有检查
line
是否为空字符串之外,可能是,如gariepy的回答所示):以及
在第一种情况下,假设
separate
至少有2个元素(在separate[1]
上使用split
),在第二种情况下,假设separate
至少有3个元素(在separate[2]
上使用split
)。在访问这些索引之前,应该首先检查它们的长度,例如:以及
另外,请记住在对
line
应用split之前检查它是否为非空字符串,如另一个答案所示。希望有帮助。你知道吗一个简单的解决方案是在使用前检查行是否为空:
空字符串list(或None)的计算结果将为False,因此代码将停止并打印您的消息(如果您不喜欢我所做的工作,也可以重新构造if语句)。任何非空字符串/列表或文本将计算为“True”,并继续执行下一个if检查。你知道吗
编辑:
添加try/except:
相关问题 更多 >
编程相关推荐