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

Python TypeError:使用itemgetter时提示列表索引需为整数或切片

解决operator.itemgetter动态传参的TypeError问题

在使用operator.itemgetter时,直接传入整数参数(如indices = itemgetter(0,1,2,3,4,5))可以正常运行,但尝试通过inputnumbers = ''.join([k for k in range(0,len(s))])生成的内容作为参数传递时,触发错误TypeError: list indices must be integers or slices, not str。

原代码

import re, os
from operator import itemgetter
from pathlib import Path
basepath = ["C:\\google\\serpapi\\indias\\temples\\hindu"]

def mkingdirs(givenlist):
    mymanog = ''.join(givenlist)
    mk_dir = Path(mymanog)
    mk_dir.mkdir(parents=True, exist_ok=True)
    return mk_dir

workingdir = mkingdirs(basepath)
os.chdir(workingdir)

N = "\\"
cwd = os.getcwd()
myd = cwd.split(N)

def getstringswitch(check_string_name):
  
    dict={
           's0' : myd[0], 
           's1' : myd[1], 
           's2' : myd[2], 
           's3' : myd[3],
           's4' : myd[4],
           's5' : myd[5],
           'd'  : 'data',
           'max_gs' : 10
          }
    return dict.get(check_string_name, cwd)

s = []
for n in range(0,len(myd)):
    assign  = ("{}{}".format('s',n))
    a = ''
    a = assign
    # 注:原代码中removen函数未定义,此处假设为自定义字符串处理函数
    assign = removen(myd[n])
    i = ''
    i = ("{}{}{}".format(a,' = ',assign))
    s.append(i)


indices = itemgetter(0,1,2,3,4,5)
bd = (N.join(map(str, indices(myd))))

givenlist = [bd,N,getstringswitch(check_string_name = 'd')]

mkdirlist = mkingdirs(givenlist)

print (mkdirlist)
indices = itemgetter(0,1,2,3,4,len(s)-1)


# 触发错误的尝试代码
inputnumbers = ''.join([k for k in range(0,len(s))])
print(inputnumbers)

问题原因

  1. 你写的''.join([k for k in range(0,len(s))])本身会触发类型错误——join要求元素是字符串,实际运行时你应该是写成了''.join([str(k) for k in range(0,len(s))]),生成的是类似"012345"的字符串。
  2. itemgetter需要接收多个独立的整数参数,而非单个字符串参数。当你把字符串传给它时,它会尝试用这个字符串去索引列表,自然触发类型错误。

解决方案

直接生成整数序列,并用*解包传递给itemgetter:

# 替换触发错误的代码块
input_indices = range(len(s))  # 生成0到len(s)-1的整数序列
indices = itemgetter(*input_indices)  # 用*解包,将每个整数作为独立参数传入

# 后续使用方式与之前一致
bd = (N.join(map(str, indices(myd))))

说明

range(len(s))生成包含所有需要索引的整数序列,用*解包后,itemgetter(*input_indices)等价于手动写出itemgetter(0,1,2,...,len(s)-1),完全符合itemgetter的参数要求,不会再触发类型错误。

内容的提问来源于stack exchange,提问作者Nature Labs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:18:22