简体   繁体   English

IndexError:索引超出范围:7

[英]IndexError: index out of range: 7

I am working with an Oracle EPM Product called Financial Data Quality Management Enterprise Edition (FDMEE). 我正在使用名为Financial Data Quality Management Enterprise Edition(FDMEE)的Oracle EPM产品。 I have written a Jython script to parse a data file and push it to a custom table within the FDMEE product schema. 我编写了一个Jython脚本来解析数据文件并将其推送到FDMEE产品模式中的自定义表。

It works fine when I am pushing a subset of data file. 当我推送数据文件的子集时,它工作正常。 But when I parse the entire data file, it fails with the error IndexError: index out of range: 7. 但是当我解析整个数据文件时,它失败并出现错误IndexError:index超出范围:7。

Following is the error message I receive : 以下是我收到的错误消息:

File "\\vmhodvesip4\D$\SVESI7\Custom\FDMEEApps\BFRVN/data/scripts/event/BefImport.py", line 5, in <module>

    if row[7]=='JAN':

IndexError: index out of range: 7

Following is the code I use : 以下是我使用的代码:

import csv

recReader = csv.reader(open('D:/SVESI7/Custom/FDMEEApps/BFRVN/inbox/BF_Reven_Load/Test03big.txt'), delimiter='!')
for row in recReader:
    if row[7]=='JAN':
        period_num = '1'
    elif row[7]=='FEB':
        period_num = '2'
    elif row[7]=='MAR':
        period_num = '3'
    elif row[7]=='APR':
        period_num = 4
    elif row[7]=='MAY':
        period_num = 5
    elif row[7]=='JUN':
        period_num = 6
    elif row[7]=='JUL':
        period_num = 7
    elif row[7]=='AUG':
        period_num = 8
    elif row[7]=='SEP':
        period_num = 9
    elif row[7]=='OCT':
        period_num = 10
    elif row[7]=='NOV':
        period_num = 11
    elif row[7]=='DEC':
        period_num = 12
    else:
        period_num = 'skip'

    if period_num != 'skip':
        params1 = ['batch_plnapps_oi',row[7],period_num,'20' + row[1][-2:],row[2], row[3], row[4], row[5], row[6], row[8], row[9], row[10], row[11], round(row[12],12)]
        ins_stmt1 = "insert into aif_open_interface(batch_name,period,period_num,year,col03,col04,col05,col06,col07,col09,col10,col11,col12,amount) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
        fdmAPI.executeDML(ins_stmt1,params1,False)

fdmAPI.commitTransaction()

There are obviously fewer than 8 columns for the affected row. 受影响的行显然少于8列。 Debug using a try/except block: 使用try/except块进行调试:

for n, row in enumerate(recReader, start=1):
    try:
        month = row[7]
    except:
        print('Row {0}: {1}'.format(n, row))

As a bonus, here is a more efficient way to write your code: 作为奖励,这是一种更有效的编写代码的方法:

months = {'JAN': 1, 'FEB': 2, 'MAR': 3, 'APR': 4, 'MAY': 5, 'JUN': 6, 
          'JUL': 7, 'AUG': 8, 'SEP': 9, 'OCT':10, 'NOV': 11, 'DEC': 12]
for row in recReader:
    month = row[7]
    period_num = months.get(month, None)

    if period_num:
        params1 = ['batch_plnapps_oi', row[7], period_num, '20' + row[1][-2:], row[2], row[3], row[4], row[5], row[6], row[8], row[9], row[10], row[11], round(row[12], 12)]
        ins_stmt1 = "INSERT INTO aif_open_interface(batch_name, period, period_num, year, col03, col04, col05, col06, col07, col09, col10, col11, col12, amount) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
        fdmAPI.executeDML(ins_stmt1, params1, False)

fdmAPI.commitTransaction()

Without seeing your .csv we can't really help you too much, but... 没有看到你的.csv我们真的无法帮助你太多,但......

  1. Ensure that every line in your csv has the correct format 确保csv中的每一行都具有正确的格式
  2. Make sure that the last line in your csv is not just whitespace. 确保csv中的最后一行不仅仅是空格。
  3. Look at the optional parameters in the documentation for csv.reader , specifically newline='' 查看csv.reader文档中的可选参数,特别是newline=''

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM