2014-05-06 676 views
-4

Python新手。我收到一個錯誤,不知道如何解決它。如您所見,我在函數中使用soem全局變量,並在程序開始時將字典初始化爲{}。Python接收KeyError:0

def bin_criticality(): 
    global gbv_bin_criticality, gbv_bin_element_ids, gbv_element_criticality 
    gbv_bin_criticality = {} 
    for (lv_key, lv_value) in gbv_bin_element_ids.items(): 
     print (lv_key, lv_value) 
     lv_coil_ids = lv_value.split(',') 
     for coil_id in lv_coil_ids: 
      gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 
    return() 

----錯誤

line 112, in bin_criticality 
    gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 
KeyError: 0 

回答

2

gbv_bin_criticality是在函數開始一個空的字典{},所以第一次嘗試:

gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 

給定值lv_key它還不存在作爲字典中的關鍵字,因此KeyError

你有三個選擇,要麼先檢查(LBYL):

if lv_key not in gbv_bin_criticality: 
    gbv_bin_criticality[lv_key] = 0 
gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 

try和失敗優雅(EAFP):

try: 
    gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 
except KeyError: 
    gbv_bin_criticality[lv_key] = int(gbv_element_criticality[coil_id]) 

或使用collections.defaultdict,它會自動處理丟失的鑰匙,代替香草dict

from collections import defaultdict 

gbv_bin_criticality = defaultdict(int) 
... 
gbv_bin_criticality[lv_key] += int(gbv_element_criticality[coil_id]) 

此外,我會拋棄global s - 使gbv_bin_element_idsgbv_element_criticality自變量的功能和return gbv_bin_criticality最後。