2010-02-06 98 views
0

当我运行该脚本:Python的IRC客户端

import socket 
from time import strftime 

time = strftime("%H:%M:%S") 

irc = 'irc.tormented-box.net' 
port = 6667 
channel = '#tormented' 
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sck.connect((irc, port)) 
print sck.recv(4096) 
sck.send('NICK supaBOT\r\n') 
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n') 
sck.send('JOIN ' + channel + '\r\n') 
sck.send('PRIVMSG #tormented :supaBOT\r\n') 
while True: 
    data = sck.recv(4096) 
    if data.find('PING') != -1: 
     sck.send('PONG ' + data.split() [1] + '\r\n') 
    elif data.find ('PRIVMSG') != -1: 
     nick = data.split ('!') [ 0 ].replace (':', '') 
     message = ':'.join (data.split (':') [ 2: ]) 
     destination = ''.join (data.split (':') [ :2 ]).split (' ') [ -2 ] 
     if destination == 'supaBOT': 
      destination = 'PRIVATE' 
     print '(', destination, ')', nick + ':', message 
     get = message.split(' ') [1] 
     if get == 'hi': 
      try: 
       args = message.split(' ') [2:] 
       sck.send('PRIVMSG ' + destination + ' :' + nick + ': ' + 'hello' + '\r\n') 
      except: 
       pass 

我得到这样的错误:

get = message.split(' ')[1] 

IndexError: list index out of range 

我怎样才能解决呢?

+1

这AARGH错字让我想起:http://pythong.org/(警告:你可以不看这个)。 – 2010-02-06 10:12:06

回答

3

这意味着message里没有空格,所以当它被一个空格分开时,会得到一个包含单个元素的列表 - 您试图访问此列表的第二个元素。你应该为这种情况插入一张支票。

编辑:回复您的评论:您如何添加支票取决于您的程序的逻辑。最简单的办法是这样的:

if ' ' in msg: 
    get = message.split(' ')[1] 
else: 
    get = message 
+0

如何插入支票? – sourD 2010-02-06 10:08:45

0

尝试

get = message.split(" ",1)[-1] 

>>> "abcd".split(" ",1)[-1] 
'abcd' 
>>> "abcd efgh".split(" ",1)[-1] 
'efgh'