2016-08-05 5 views
1

아래의 프로그램을 인쇄하려면 None 값을 사용하십시오. 왜 그 사람의 인쇄를 도울 수 있습니까 None?이 코드가 인쇄되지 않는 이유는 무엇입니까?

class Myself(object): 
    def __init__(self): 
     self.record={} 
    def __iter__(self): 
     self._roles = list(self.record.keys()) 
     #print ("in iter self._roles",type(self._roles)) 
     return self 
    def __next__(self): 
     if self._roles: 
      return self._roles.pop() 
     else: 
      StopIteration 

    def __setitem__(self,key,value): 
     self.record[key]=value 
    def __getitem__(self,key): 
     return self.record.get(key,"No record found") 

    def list_all(self): 
     for detail in self.record: 
      print (self.record[detail]) 

def main(): 
    mydetails = Myself() 

    mydetails['name']='Python' 
    mydetails['age']='26' 
    mydetails['job']='software' 
    mydetails.list_all() 

    for x in mydetails: 
     print (x,":",mydetails[x]) 

main() 

답변

1

당신은 StopIteration 인상해야

def __next__(self): 
    if self._roles: 
     return self._roles.pop() 
    else: 
     raise StopIteration 
1

을 당신은 인상StopIteration execption해야합니다

def __next__(self): 
    if self._roles: 
     return self._roles.pop() 
    else: 
     raise StopIteration 

당신이 그것을 raise하지 않기 때문에, 당신은 단지 이름을 참조하는 , 아무것도하지 않습니다. 그런 다음 __next__ 메서드가 끝나면 기본값 인 return None이 암시됩니다.

관련 문제