对python数组的访问会导致索引错误,但数组已填充

对python数组的访问会导致索引错误,但数组已填充,python,arrays,indexoutofrangeexception,Python,Arrays,Indexoutofrangeexception,我的程序有问题。我想逐行读取一个文件,并将每一行拆分为字部分,然后将其保存到数组中。到现在为止,一直都还不错。 阅读很有效。拆分是有效的。数组已填充。但是,当我试图访问任何其他元素时,首先我会得到“IndexError:列表索引超出范围”。 当我打印整个arry时没有问题。然后显示每个元素 下面是代码: zieldatei = open('c:\\datacrawler.txt','a') with open('c:\\Python35\\'+Dateiname,'r') as f: for

我的程序有问题。我想逐行读取一个文件,并将每一行拆分为字部分,然后将其保存到数组中。到现在为止,一直都还不错。 阅读很有效。拆分是有效的。数组已填充。但是,当我试图访问任何其他元素时,首先我会得到“IndexError:列表索引超出范围”。 当我打印整个arry时没有问题。然后显示每个元素

下面是代码:

zieldatei = open('c:\\datacrawler.txt','a')
with open('c:\\Python35\\'+Dateiname,'r') as f:
 for line in f:
  analyser(line)
  if 'SET NAME IS' in line:
   break


def analyser (empfaenger):
 strlaenge= len(empfaenger)
 record = 'RECORD NAME IS'
 stufennummer2 = empfaenger.split()
 #print(stufennummer2)     <------------this is possible
 print(stufennummer2[1])  <-------------this makes problems
 stufennummer = stufennummer2[1]<-------this makes problems 
 typ1 = 'type is binary'
 typ2 = 'pic x' 
 if stufennummer == '01' :
  feldname = empfaenger.split()[2]
  strlaenge2 = len(feldname)
  strlaenge3 = str(strlaenge2)
  zieldatei.write('        77 FN-ST-TAG PIC X('+strlaenge3+')name+'".\n')
zieldatei=open('c:\\datacrawler.txt','a')
以open('c:\\Python35\\'+Dateiname,'r')作为f:
对于f中的行:
分析仪(线路)
如果行中的“集合名称为”:
打破
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()

#打印(stufennummer2)这是打印(stufennummer2)输出的一部分。这是一个很大的洞来显示的东西:

['R', '*--ROCHADE-GENERIERUNG--*:', 'AM', '06.12.12', 'UM', '08:22:49']
['R', '01', 'IK25-UPD-COUNT', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-STATUS', 'PIC', 'X(01).']
['R', '01', 'IK25-KTO-ART', 'PIC', 'X(01).']
['R', '01', 'IK25-KTO-ORDN-BEGR', 'PIC', 'X(20).']
['R', '01', 'IK25-PN-LFD-NR', 'TYPE', 'IS', 'BINARY', '15.']
['R', '01', 'IK25-PN-ABRUF-PER-DATUM', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-FUELLBYTE', 'PIC', 'X(01).']
['R', '01', 'IK25-MUSTER-ART', 'PIC', 'X(01).']
['R', '01', 'IK25-MST-ERST-TM-KEY', 'TYPE', 'IS', 'DECIMAL', '18,0.']
['R', '01', 'IK25-MUSTER-GUELTIG-VON', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-PN-ABRUF-VERARB-DATUM', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-PN-BETRAG', 'TYPE', 'IS', 'DECIMAL', '9,2.']
['R', '01', 'IK25-PN-CTV-PRODUKT-MM', 'PIC', 'X(01).']
['R', '01', 'IK25-PN-ABRUF-BETRAG', 'TYPE', 'IS', 'DECIMAL', '9,2.']
['/']

要跳过太短的行(这显然是您的问题),您可以如下更改代码:

def analyser (empfaenger):
 strlaenge= len(empfaenger)
 record = 'RECORD NAME IS'
 stufennummer2 = empfaenger.split()
 if len(stufennummer2) < 2:
  print('Line too short')
  return
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()
如果len(stufennummer2)<2:
打印('行太短')
回来

如果值不存在,则无法读取该值。跳过太短的行 这是一种方式。添加以下行:

def analyser (empfaenger):
    strlaenge= len(empfaenger)
    record = 'RECORD NAME IS'
    stufennummer2 = empfaenger.split()
    if len(stufennummer2) < 2:
         return
    # your code here
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()
如果len(stufennummer2)<2:
回来
#你的代码在这里

请记住,python列表索引从0开始,为什么不向我们展示
打印(stufennummer2)
打印的内容以及
打印(stufennummer2[1])
产生的异常?剩下的就不相关了。print(stufennumer2)用行中的元素打印每个数组。print(stufennummer2[1])为我提供了一个IDEXERR,当我试图访问数组的特定元素时,程序会中断。请显示print(stufennummer2)的输出。最后一个数组仅作为一个元素,因此stufennummer2[1]将在那里失败。