2015-12-13 63 views
0

我有,我有被列爲「ID名稱******中國地址」人的文件,如:寫入文件條款

1 Mike 0752 Dallas Alley 
2 John 0744 Square Avenue 
3 Johnny 0923 Corner Street 

每當我試圖刪除或修改一個人它不會讓我這樣做,除非我在程序執行期間添加該人員。我的意思是,我運行我的程序,除非添加該人(通過我使用的添加方法),否則我將無法修改我的文件。

我可以添加人員到文件,就像我說的,但即使如此,它不檢查ID是否已經存在,即使我已經在我的方法中設置了該設置。

我應該提到,我有一個基於類的程序,具有存儲庫 - 控制器 - 用戶界面結構。保存功能,我在我的倉庫是:

def save(self, pers): 
     ''' 
     Saves a person in class Persoana, returns ValueError if the ID already exists 
     ''' 
     for i in self.__persList: 
      if(i.idPers == pers.idPers): 
       raise ValueError("ID already exists: " +str(i.idPers)) 
     self.__persList.append(pers) 

我用我的控制器此功能,如下所示:

def createPerson(self, idPers, nume, telefon, adresa): 
     ''' 
     Creates a person as long as the data introduced is correct 
     ''' 
     i = Persoana(idPers, nume, telefon, adresa) 
     self.__valiPers.validare(i) //checks if the data I put in is alright(name doesn't contain numbers etc.) 
     self.__repo.save(i) 

我使用繼承做出FileRepository文件文件,它繼承方法/參數從最初的Repository文件。

class AgendaFileRepository(AgendaRepository): 
    def __init__(self, file_name): 
     self.__file_name = file_name 
     AgendaRepository.__init__(self) 
     self.__load_from_file() 

    def __write_to_file(self): 
     l=self.get_persoane() 
     f=open(self.__file_name,"w") 
     for person in l: 
      f.write(repr(person)+'\n') 
     f.close() 

    def __load_from_file(self): 
     try: 
      f=open(self.__file_name,"r") 
      linie=f.readline().rstrip('\n') 
      while linie!="": 
       attr=linie.split(" ") 
       a=Persoana(attr[0], attr[1], attr[2],attr[3]) 
       AgendaRepository.save(self, a) 
       linie=f.readline().rstrip('\n') 
      f.close() 
     except IOError: 
      raise IOError("File cannot be open") 
     except ValueError: 
      raise ValueError("Can't read from file") 
     except IndexError: 
      raise IndexError("Can't read from file") 

    def save(self, pers): 
     AgendaRepository.save(self, pers) 
     self.__write_to_file() 

,我在我的UI文件夾的功能是:

def addPerson(self): 
     ''' 
     Adds a person to the file, returns value error if the data isn't valid 
     ''' 
     name=input("Name: ") 
     telnumber = input("Tel number: ") 
     adress = input("Adress: ") 
     idPers=int(input("Id:")) 
     try: 
      self.__ctrl.createPerson(idPers, name, telnumber, adress) 
      print("Added person successfully")    
     except ValueError as ex: 
      print(str(ex)) 

不管怎樣,我認識到,這項工作可以做到的方式更容易/更快,但教授希望讓我們瞭解OOP我猜測。無論如何,我可以將文件寫入文件,但它不會檢查該用戶的ID是否已經存在,除非在程序執行過程中添加了該用戶。我不能刪除/修改人員,除非他們在程序執行期間被添加。

現在用這個檢查我的大腦2個小時,檢查每一行和每一行,但我似乎無法破解它。我究竟做錯了什麼?

+0

讓程序在添加人員時寫入測試輸出(打印)。然後你可以看到程序啓動時是否正確添加人員。 – Randrian

+0

旁註:您正在使用/執行'repr()'/'__repr __()'錯誤。這是程序員/調試的字符串表示,而慣例可以是一個字符串,它可以是'eval()',以便在尖括號中獲得相同的值或某些字符,這對搜索錯誤時程序員或多或少有幫助。你可以使用'str()'/'__str __()'或添加專用的(de)序列化方法。此外,「私有」屬性的雙下劃線是錯誤的:Python沒有私有名稱,該名稱是爲了不同的目的。只需使用一個下劃線來標​​記實施細節。 – BlackJack

回答

0

好吧,我找到了問題。問題是i.idPers和pers.idPers的類型不一樣。一個是一個字符串,另一個是一個整數,它們之間的相等性從未發生,因此程序永遠不會進入IF循環。