2016-11-13 67 views
0

不知何故我有問題來填充枚舉到我的函數中。不知何故,我收到以下錯誤信息:在函數Python中填充枚舉

line 22, in SetRevenueScenarios self.Scenarios[len(self.Scenarios.keys())] = data

AttributeError: 'Market' object has no attribute 'Scenarios'

該代碼的目標是將重複收入填入熊貓數據框中。所使用的函數應該填充一次收入,並用專用BU的枚舉來標識它。

import csv 
from enum import Enum 
import pandas as pd 

class EmpID(Enum): 
    TVs = 1 
    Camera = 2 
    Computers = 3 
    Jeans = 4 
    Jacket = 5 
    Meat = 6 


class Market(object): 

    def SetEmployerID(self, empID): 
     self.empID = empID 

    def SetRevenueScenarios(self, past_revenues, Enum): 
     data = pd.Series(past_revenues) 
     data = data.convert_objects(convert_numeric=True) 
     self.Scenarios[len(self.Scenarios.keys())] = data    

    def GetEmployerID(self): 
     return self.empID 

    def GetRevenueScenarios(self, scenario_number): 
     return self.Scenarios[scenario_number] 

#--------------------------------------------------------------- 

def read_csv(filename): 
    market_dict = dict() 

    with open(filename, newline='') as csvfile: 
     reader = csv.reader(csvfile, delimiter=';')  
     for column in reader: 

      if column[0] == "EmpID": 
       mark = Market() 
       mark.SetEmployerID(column[1]) 

      if column[0] == "Area": 
       if column[1] == "Electronic_TVs": 
        mark.SetRevenueScenarios(column[1:],EmpID.TVs) 

       market_dict[mark.GetEmployerID()] = mark 


    return market_dict 

#--------------------------------------------------------------- 

if __name__ == '__main__': 
    market_list=read_csv('C:Filiale.TXT') 

    for BM_id in market_list: 
     print(market_list[BM_id].GetEmployerID()) 

輸入文件看起來像:

EmpID;Martin 
Area;Electronic_TVs 
BU;TVs 
Revenues;100;300;1000;4000;20000;300000 
Area;Electronic_Computers 
BU;Computers 
Revenues;300;600;4000;8000;200000;3000000 
Area;Clothes_Jeans 
BU;Jeans 
Revenues;10;30;10000;40000;100000;2000000 
EmpID;James 
Area;Food_Meat 
BU;Meat 
Revenues;100;300;10;40;20;30 
+0

你在哪裏初始化'Market.Scenarios'? – pzp

+2

您可能需要一個'Market .__ init __()'來初始化'self.Scenarios = []' – AChampion

回答

1

該錯誤信息是正確的。你的市場類沒有屬性的方案,但你試圖訪問一個位置:

self.Scenarios[len(self.Scenarios.keys())] 

你忘了在構造函數中定義的?

+0

謝謝。我忘了初始化它。但我怎樣才能使用getters函數枚舉器來調用函數? – MCM

+0

@MCM你的程序部分不清楚。這個代碼中枚舉的目的是什麼?它如何在不同的功能中使用?是與收入方案關聯的代碼中的枚舉(名爲EmpId?)? –

+0

是每個場景都應該得到枚舉數。當我打電話給我時,我只能打電話給收益方案。最好爲每個場景定義一個獨立的功能 – MCM