Python 索引器:列表索引超出范围

Python 索引器:列表索引超出范围,python,list,Python,List,我正在用python分析Apache访问日志文件,我想从中提取referer字段referer位于第9个位置,使用空格作为分隔符将其拆分。(使用空格拆分后总共有9个以上的字段。)下面的代码将提取的字段写入文件 for line in open('log'): referer = line.split(' ')[9] fo.write(referer +'\n') 这里的问题是referer字段被写入文件,但是程序给出了以下错误?有什么问题吗 Traceback (most re

我正在用python分析Apache访问日志文件,我想从中提取
referer
字段
referer
位于第9个位置,使用空格作为分隔符将其拆分。(使用空格拆分后总共有9个以上的字段。)下面的代码将提取的字段写入文件

for line in open('log'):
    referer = line.split(' ')[9]
    fo.write(referer +'\n')
这里的问题是referer字段被写入文件,但是程序给出了以下错误?有什么问题吗

Traceback (most recent call last):
  File "temp.py", line 18, in <module>
    referer = line.split(' ')[9]
IndexError: list index out of range

文件中可能有一个空行(结尾可能有一个额外的换行符),或者只有一个较短的换行符

您可以(例如)使用enumerate来查找它

for i, line in enumerate(f):

这意味着文件中的一行在拆分后没有[9]索引。检查文件。打印行号以检查错误的位置

i=0
for line in open('log'):
    referer = line.split(' ')[9]
    fo.write(referer +'\n')
    print i
    i+=1

您将在vim或任何编辑器中找到行号并在该位置检查行

这意味着并非所有线条看起来都一样。可能有一些行比这一行短。可能其中一行短了,这会中断您的脚本。请包含一个try/except代码,该代码打印出引发异常的行,以便您可以验证该行是否不符合pattern@jabaldonedo谢谢,成功了!
i=0
for line in open('log'):
    referer = line.split(' ')[9]
    fo.write(referer +'\n')
    print i
    i+=1