2015-09-08 22 views
0

我正在嘗試使用{Key,Value}遍歷OrderedDict,但是我正在運行到Key Error。該iteritems()在Python 3.4,我使用已被廢棄,現在我必須使用項目()做同樣的事情在Python 3.4中使用OrderedDict遍歷錯誤

File "/home/hotdogs/mydictset.py", line 88, in __init__ 
self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k] ['stop']) 
KeyError: 'timed_exit_bars' 


class MySet() 
    def __init__(self, filePath): 
    # Read diagnostics set file 
    self.content = readSetFile(filePath) 
    if not self.content: return 
    self.sections = self.content._sections 
    self.mainParams = {} 
    self.optimizationArray = {} 
    global paramIndexes 

    #for k, v in OrderedDict(self.content.items('main')).iteritems(): --was from python 2.7 and i have removed it. 

    for k, v in OrderedDict(self.content.items('main')).items(): 
     # Add the params names avoiding the optimization line 
     if k.find(",") == -1: 
      # Adding name of the param and the value 
      if k not in self.mainParams: 
       self.mainParams[k] = {} 
      self.mainParams[k]['value'] = v 
      # optimization flags 
      if self.content.has_option('main', k + ',F'): 
       if self.content.getboolean('main', k + ',F') == 1: 
        self.mainParams[k]['optimize'] = True 
        self.mainParams[k]['start'] = self.content.getfloat('main', k + ',1') 
        self.mainParams[k]['step'] = self.content.getfloat('main', k + ',2') 
        self.mainParams[k]['stop'] = self.content.getfloat('main', k + ',3') 
        self.optimizationArray[paramIndexes[k]] = (
        self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k]['stop']) 
       else: 
        self.mainParams[k]['optimize'] = False 
      else: 
       self.mainParams[k]['optimize'] = False 

    i = 0 

當我嘗試調試的關鍵錯誤。我發現mainParams只包含一個普通的未排序字典,參數本身也是普通字典,它們本身來自下面的調試。樣品低於

{'section_1': {'value': '################# General Settings #################', 'optimize': False}, 
    'run_every_tick': {'value': '0', 'optimize': False}, 
    'historic_data_id': {'value': '1', 'optimize': False}, 
    'section_2': {'value': '############## Common Strategy Settings ##############','optimize': False}, 
    'use_instance_balance': {'value': '0', 'optimize': False}, 
    'comments': {'value': 'Click Modify expert to view comments inside the source code.', 'optimize': False}, 
    'operational_mode': {'value': '1', 'optimize': False}, 
    'instance_management': {'value': '0', 'optimize': False}, 
    'analysis_window_size': {'value': '0', 'optimize': False}, 
    'enable_screenshots': {'value': '0', 'optimize': False}, 
    'timed_exit_bars': {'step': 5.0, 'start': 5.0, 'value': '60', 'stop': 100.0, 'optimize': True}, 
    'max_open_orders': {'value': '1', 'optimize': False}, 
    'strategy_timeframe': {'value': '60', 'optimize': False}, 
    'ui_font_size': {'value': '12', 'optimize': False}, 
    'disable_compounding': {'value': '1', 'optimize': False}} 

下面是我通過調試得到ParamIndexes

{ 
'INTERNAL_STRATEGY_ID': 52, 
'RUN_EVERY_TICK': 43, 
'MAX_OPEN_ORDERS': 45, 
'OPERATIONAL_MODE': 50, 
'ANALYSIS_WINDOW_SIZE': 55, 
'TIMEFRAME': 53, 
'DISABLE_COMPOUNDING': 47, 
'INSTANCE_MANAGEMENT': 44, 
'MAX_SPREAD': 59, 
'TIMED_EXIT_BARS': 48, 
'STRATEGY_INSTANCE_ID': 51, 
... 
... 
.... 
.... 
.... 
.... 
.... 
.... 
.... 
.... 
} 

一個樣品有我丟失的東西。我似乎無法使用items()來遍歷字典。任何幫助,非常感謝。

+1

'paramIndexes'的值是什麼?可能是那個關鍵錯誤 – lemonhead

+0

'對於k,v在OrderedDict(self.content.items('main'))。items()' - 在規則字典上調用OrderedDict不會回到過去,檢索您從未跟蹤過的訂購信息,並且在OrderedDict上調用OrderedDict是沒有意義的,除非您需要副本。 – user2357112

回答

0

的問題是在這條線:

self.optimizationArray[paramIndexes[k]] = (
self.mainParams[k]['start'], self.mainParams[k]['step'], self.mainParams[k]['stop']) 

既然你剛剛創造self.mainParams[k]['start']self.mainParams[k]['step']self.mainParams[k]['stop'],那些沒有提高錯誤。剩下的唯一罪魁禍首是paramIndexes[k]和/或self.optimizationArray[paramIndexes[k]]

我會仔細檢查paramIndexeskself.optimizationArray任何paramIndexes[k]映射到。

此問題與OrderedDict無關。這只是一個KeyError。