You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python执行print(list(map对象))语句后触发IndexError异常问题求助

问题根因解析
  1. 迭代器单次消耗特性
    Python 3 中 map() 函数返回的是迭代器对象,而非列表。迭代器仅支持单次遍历,所有元素被读取一次后就会被清空,无法重复读取。
    你在print(list(arrNSEGSMList))这一步已经把map返回的迭代器里的所有元素全部消耗完了,后续再执行list(arrNSEGSMList)只能拿到空列表,转换得到的numpy数组就是长度为0的空数组,删除第0行自然会触发索引越界的报错。
    删除print语句后,迭代器没有被提前消耗,第一次转list就能拿到完整数据,所以可以正常执行。

  2. 存在变量名笔误
    你代码中arrNSEGSMList = numpy.array(list(arrNSEGSMList1))里的arrNSEGSMList1是未定义的变量,这属于笔误,实际应该替换为你之前定义的arrNSEGSMList,否则即使解决了迭代器的问题也会触发NameError。

修复方案

直接在生成map结果时就转为列表存储,避免使用迭代器:

import requests
import numpy

objNSEResponse = requests.get("https://www.nseindia.com" , headers = { "Referer":"https://www.nseindia.com" , "User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"})
objNSECookieJar = objNSEResponse.cookies

objNSEResponse = requests.get("https://www.nseindia.com/api/reportGSM?csv=true" , headers = {"Referer":"https://www.nseindia.com" , "User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"} , cookies = objNSECookieJar)

# 把原map行修改为下方代码,直接存列表而非迭代器
arrNSEGSMList = list(map(lambda arrNSEGSMRecord : arrNSEGSMRecord.replace("\"","").split(","), objNSEResponse.content.decode("utf-8-sig").replace("\n\"","\"").split("\n")))

print(arrNSEGSMList)

# 后续直接用变量即可,不需要再转list
arrNSEGSMList = numpy.array(arrNSEGSMList)
arrNSEGSMList = numpy.delete(arrNSEGSMList, [0], axis=0)        # delete header row
arrNSEGSMList = numpy.delete(arrNSEGSMList, [2,3,4], axis=1)    # delete all columns except stock symbol and serial number

内容的提问来源于stack exchange,提问作者Aadee Maanav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:06:04