2016-06-24 4 views
1

정보의 가벼운 정보를 저장하고 태그 연결을 통해 검색하는 프로그램을 구성하는 파이썬 파일 집합이 있습니다. 많은 버전에서이 프로그램을 사용하고 있었지만, 최근에 프로그램을 엉망으로 만드는 사소한 변화라고 생각한 것을 만들었습니다. ENTRY 오브젝트는 고유 한 ID 번호, 별 *, 값 W 태그 목록을 보유하는 데이터 저장 영역의 기초입니다.속성이 있더라도 Python 3 AttributeError

class ENTRY: 

def __init__(self, idNum, nickName, value, tagList): 
    self.idNum = idNum 
    self.nickName = nickName 
    self.value = value 
    self.tagList = tagList 

나는 다른 파일에서 입력을 요청할 때 내가 의미로 "이름"과 "닉네임"속성을 언급 한 것을 깨달았다, 그래서 찾아 모두가 "이름"에와 "닉네임"의 언급 교체하기로 결정 코드를 쉽게 따르도록하십시오. ENTRY.py 파일뿐만 아니라 프로그램의 모든 관련 파이썬 파일에서도이 작업을 수행했습니다. 심지어 변경 사항이 대소 문자를 구별하는 함수 호출 또는 다른 것을 혼란에 빠뜨리지 않았는지 확인하기 위해 교정합니다.

문제는 :

:
Traceback (most recent call last): 
    File "/Memory/TagMem.py", line 210, in <module> 
    main() 
    File "/Memory/TagMem.py", line 207, in main 
    dispatch(userChoice) 
    File "/Memory/TagMem.py", line 171, in dispatch 
    nameList('todo') 
    File "/Memory/TagMem.py", line 103, in nameList 
    memory.searchListNames(queryList) 
    File "/Memory/Memory.py", line 96, in searchListNames 
    each.printName() 
    File "/Memory/ENTRY.py", line 49, in printName 
    print("({}) {}".format(self.idNum, self.name)) 
AttributeError: 'ENTRY' object has no attribute 'name' 

그러나 찾기 및 바꾸기 후

이 엔트리 객체가 가장 확실 속성 '이름'을 가지고 : 나는이 프로그램을 실행하면 이제, 내가 속성 오류
class ENTRY: 

def __init__(self, idNum, name, value, tagList): 
    self.idNum = idNum 
    self.name = name 
    self.value = value 
    self.tagList = tagList 

속성이 클래스 생성자에서 매우 명확하게 정의 된 경우 특성 오류가 발생하는 이유를 알고있는 사람이 있습니까? https://github.com/kylelambert101/TagMem

을 그리고 특정이 충돌 유도 변경을 커밋 : 전체 클래스 코드에 대한 완전한 정보

의 GitHub의 저장소를 참조 https://github.com/kylelambert101/TagMem/commit/68987f2e6ed98012f36ec5230b3dac6f09373489

감사합니다!

+1

당신이 생각하는 버전을 실행하고 있는지 확인하십시오. – user2357112

+0

한 파일에서 실행중인 다른 파일로 사용자가 작성한 클래스를 가져 오는 것 같습니다. 그렇다면 파이썬 인터프리터를 종료하고 다시 시작하려고 했습니까? 종료하지 않는 한 재실행하면 종속 모듈의 변경 사항이 업데이트되지 않습니다. – Jeff

+0

흠, 나는 두 번 나가서 그 프로그램을 두 번 다시 열었습니다. 그래서 그게 문제라고 생각하지 않습니다. 그러나, 귀하의 의견은 어떤 파일이 ENTRY.name에 액세스하려고하는지 생각하게 만들었습니다. 문제는 제가 내부에있는 많은 ENTRY 개체로 데이터베이스를 절인 한 것이라고 생각합니다.새로운 항목을 만들 수 있지만 이전 속성의 이름 특성에 액세스하려고하면 오류가 발생합니다. 문제가 해결되면 수정하고 내 게시물을 업데이트합니다! – Kyle

답변

0

어디서 잘못되었는지 알아 냈습니다! 내 프로그램은 Memory 개체의 피클링 된 버전을 저장하는 myMemory.dat 파일과 연결되어 있으며 프로그램이 실행될 때마다로드되어 저장됩니다. Memory 개체는 본질적으로 쿼리 할 ENTRY의 목록입니다. 당시 name 대신이라는 이름을 사용하기 위해 모든 코드를 업데이트 한 시점에서 속성 대신 nickName 속성을 가진 이전 ENTRY 객체의 각 인스턴스가 myMemory.dat에 저장된 ENTRY 개의 객체를 이미 가지고있었습니다. ENTRY 개체의 name 특성에 액세스하려고 시도한 함수를 호출 할 때 문제의 개체에 해당 특성이 없기 때문에 프로그램에서 오류가 발생했습니다.

수정 : 나는 Memory 객체 myMemory.dat에 저장하고 새로운 Memory 객체의 새로운 ENTRY들에 정보를 모두 복사를 통해 루프. 새로운 MemorymyMemory.dat에 저장했으며 프로그램이 새로운 것으로 작동합니다.

관련 문제