2013-03-27 62 views
0

我想設置assoc數組索引作爲IP,所以我可以跟蹤它們出現在數據包中的次數。IP作爲Python關聯/字典數組索引/鍵

log = {} 
if log[str(s_addr)] < 1: 
    log[str(s_addr)] = 1 
else: 
    log[str(s_addr)] += 1 
    if log[str(s_addr)] > 100: 
     data_salary = { 
      'protocol' : str(protocol), 
      'source_ip': str(s_addr), 
      'dest_ip': str(d_addr), 
      'source_port':str(source_port), 
      'dest_port': str(dest_port) 
     } 
     cursor.execute(add_salary, data_salary) 
     cnx.commit() 
     print("Logged") 

然而,這是給我一個KeyError異常

是否有這樣做的沒有更好的辦法?

回答

1

它給你一個KeyError,因爲log[str(s_addr)]是不確定的,當你試圖進行比較。嘗試類似:

log = { 
    str(s_addr) : 0 
} 
if log[str(s_addr)] < 1: 
    ... 
+0

但是,值得注意的是,給定此代碼,'log [str(s_addr)]'將每次都重置爲0;我只是在處理KeyError。爲了向您提供更多建議,我需要更多關於此代碼更好環境的信息。 – Hamms 2013-03-27 20:31:21

+1

或者可以將'log'設爲'collections.defaultdict(int)'。 – martineau 2013-03-27 20:54:26