列表索引超出范围错误:Python

Posted

技术标签:

【中文标题】列表索引超出范围错误:Python【英文标题】:List Index Out of Range Error : Python 【发布时间】:2016-01-06 23:38:02 【问题描述】:

我正在从事计算机网络的编程练习:Kurose 和 Ross 的自顶向下方法(第 6 版)

当我运行服务器代码并在浏览器中键入 localhost:1234/www.facebook.com 时,我遇到了 List Index Out of Range 错误。

错误: 收到来自: ('127.0.0.1', 15376) 的连接

消息: 回溯(最近一次通话最后): 文件“Manu.py”,第 17 行,打印 message.split()[1]

IndexError: 列表索引超出范围

代码

from socket import socket
import sys

if len(sys.argv) <= 1:
    print('Usage: "python ProxyServer.py server_ip\n'
          'server_ip: It is the IP Address of the Proxy Server')
    sys.exit(2)

# Create a server socket, bind it to a port and start listening
tcpSerPort = 1234
tcpSerSock = socket(AF_INET, SOCK_STREAM)

# Prepare a server socket
tcpSerSock.bind(('', tcpSerPort))
tcpSerSock.listen(5)

while True:
    # Start receiving data from the client
    print 'Ready to serve...'
    tcpCliSock, addr = tcpSerSock.accept()
    print 'Received a connection from: ', addr
    message = tcpCliSock.recv(1024)

    # Extract the filename from the given message
    print message.split()[1]
    filename = message.split()[1].partition("/")[2]
    fileExist = "false"
    filetouse = "/" + filename

【问题讨论】:

【参考方案1】:

这些是假设某些东西被退回的可能罪魁祸首:

print message.split()[1]
filename = message.split()[1].partition("/")[2]

试试:

m = message.split()
if m:
    print(m[1])
    filename = m[1].partition("/")[2]

此外,在加入文件时最好不要使用“/”,因为它是特定于平台的。一种更 Pythonic 的方式是使用 join:

import os
file_path = os.path.join(directory, filename)

【讨论】:

【参考方案2】:

当您从列表中访问没有任何元素的元素时,此行正在创建错误。试试下面的代码,检查是否在消息中获取元素。

if len(message.split())> 0:
    print message.split()[1]

【讨论】:

以上是关于列表索引超出范围错误:Python的主要内容,如果未能解决你的问题,请参考以下文章

列表索引超出范围错误:Python

Python Pandas 索引错误:列表索引超出范围

Python for 循环:“列表索引超出范围”错误?

Python:出现“列表索引超出范围”错误;我知道为啥但不知道如何解决

为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?

如何在 python 3.4 tkinter“索引错误:列表索引超出范围”中修复此错误