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

0 投票
3 回答
2605 浏览
提问于 2025-04-17 04:55

当我尝试打印 splited_data[1] 时,出现了错误信息 IndexError: list index out of range,而 splited_data[0] 则正常工作。我想把数据插入到 MySQL 数据库中,splited_data[0] 是我的 MySQL 列名,而 splited_data[1] 是对应的列值。我希望如果 splited_data[1] 是空的,就在 MySQL 中插入一个空字符串。但我遇到了 IndexError: list index out of range 的错误。该如何避免这个错误呢?请帮帮我,谢谢。

这是我的代码,运行得很好。只有在 splited_data[1] 为空时,我才会收到这个错误信息。

    def clean(data):
        data = data.replace('[[','')
        data = data.replace(']]','')
        data = data.replace(']','')
        data = data.replace('[','')
        data = data.replace('|','')
        data = data.replace("''",'')
        data = data.replace("<br/>",',')
        return data


for t in xml.findall('//{http://www.mediawiki.org/xml/export-0.5/}text'):
    m = re.search(r'(?ms).*?{{(Infobox film.*?)}}', t.text)
    if m:
        k =  m.group(1)
        k.encode('utf-8')
        clean_data = clean(k) #Clean function is used to replace garbase data from text
        filter_data = clean_data.splitlines(True) # splited data with lines
        filter_data.pop(0)
        for index,item in enumerate(filter_data):
                splited_data = item.split(' = ',1)
                print splited_data[0],splited_data[1]

# splited_data[0] used as mysql column 
# splited_data[1] used as mysql values

这是 Splited_data 的数据

[u' music         ', u'Jatin Sharma\n']
[u' cinematography', u'\n']
[u' released      ', u'Film datedf=y201124']

3 个回答

0

一个 list 是连续的。这意味着在你尝试访问它之前,必须确保它的长度大于你要访问的索引。

'' if len(splited_data) < 2 else splited_data[1]

你也可以在分割之前先检查一下:

if '=' in item:
    col, val=item.split('=',1)
else:
    col, val=item, ''
0

试着把等号两边的空格去掉,像这样:

splited_data = item.split('=',1)
1

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码时犯了一些小错误。

例如,当你在写代码时,如果没有注意到某些细节,比如变量的命名、数据类型的使用,或者是逻辑的顺序,就可能导致代码无法正常工作。

另外,调试也是一个很重要的过程。调试就是找出代码中哪里出错了,并进行修正。这个过程可能需要耐心和细心,因为有时候错误并不明显,需要仔细检查每一行代码。

总之,编程就像解谜一样,需要不断尝试和学习。遇到问题时,不要气馁,慢慢分析,找到解决办法。

split_data = item.partition('=')
# If there was an '=', then it is now in split_data[1],
# and the pieces you want are split_data[0] and split_data[2].
# Otherwise, split_data[0] is the whole string, and
# split_data[1] and split_data[2] are empty strings ('').

撰写回答