Python字典由于某种原因抛出KeyError

2024-10-01 15:48:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在某些代码中,我向字典(TankDict)传递一个列表中的字符串。不管我输入什么字母,这都会抛出一个键错误。当我在程序上下文之外复制并粘贴字典,并从列表中传递相同的字母时,它们都正确地输出了。我还运行了type(TankDict),它返回为“dict”。 这是字典: TankDict = {'E':0, 'F':1, 'G':2, 'H':3, 'I':4, 'J':5, 'K':6, 'L':7, 'M':8, 'N':9, 'O':10, 'P':11, 'Q':12, 'R':13, 'S':14, 'T':15, 'U':16, 'V':17, 'W':18, 'X':19}

错误: enter code herechannelData[1] = tank_address_dict[channelData[1]] KeyError: 'L' (tank_address_dict是传递TankDict的函数参数)

channelData的内容:['447', 'L', '15', 'C']

有人能告诉我发生这种事的(可能很简单)原因吗?在

编辑:代码!在

这是错误所在的函数:

def getTankID(channel,tank_address_dict,PTM_dict,channel_ref):
rawChannelData = 'NA' 
for line in channel_ref:
    if str(channel) in line: rawChannelData = line
if(rawChannelData == 'NA'): return -1;
channelData = rawChannelData.split(' ')
channelData.extend(['',''])
channelData[1] = channelData[1][:-1]
channelData[3] = channelData[1][-1]
channelData[1] = channelData[1][:-1]
channelData[2] = channelData[1][1:]
channelData[1] = channelData[1][:1]
print channelData #debug
print 'L' in tank_address_dict
print 'E' in tank_address_dict
print 'O' in tank_address_dict
print 'U' in tank_address_dict
print type(tank_address_dict)
channelData[1] = tank_address_dict[channelData[1]]
channelData[3] = PTM_dict[channelData[3]]
return(channelData[1:])

这是调用它的函数:

^{pr2}$

这是代码调用:

import hawc_func
import debug_options
#begin defs
model = hawc_func.createDataStruct() #create the data structure
TankDict = hawc_func.createTankDict() #tank grid coordinate conversion table
PTMDict = hawc_func.createPMTDict() #PMT conversion table
log1 = open('Logs/log1.txt','w') #open a logfile
data = open('Data/event.txt','r') #open data
channel_ref = open('aux_files/channel_map.dat','r')
time_scale = 1 #0-1 number to scale nano seconds? to seconds
#end defs
hawc_func.runFile(model,data,4000,TankDict,PTMDict,time_scale,channel_ref)

#hawc_func.runFile(model,data,TankDict,PTMDict)
#close files
log1.close()
data.close()
#end close files
print '-----Done-----' #confirm tasks finished

tank_address_dict通过此函数创建,由第三个代码块运行,然后通过其他两个代码块传递:

def createTankDict():
    TankDict = {'E':0, 'F':1, 'G':2, 'H':3, 'I':4, 'J':5,
               'K':6, 'L': 7, 'M':8, 'N':9,
               'O':10, 'P':11, 'Q':12, 'R':13, 'S':14, 'T':15,
               'U':16, 'V': 17, 'W':18, 'X':19}
    return TankDict

Tags: 代码inrefdataaddresschannelopendict
1条回答
网友
1楼 · 发布于 2024-10-01 15:48:49

你没有正确传递你的论点。在

def runFile(model, datafile, time_scale, max_PEs, tank_address_dict, PMT_dict, channel_ref):

hawc_func.runFile(model,data,4000,TankDict,PTMDict,time_scale,channel_ref)

这里有max_PEs = TankDict。在

这可能不是你唯一的问题。先解决这个问题,如果你仍然有问题,用你的固定代码更新你的帖子,然后告诉我们你的新错误是什么。在

相关问题 更多 >

    热门问题