2014-07-25 3 views
0

저는 python에 익숙하지 않고 codecademy를 ​​통해 Python으로 프로그래밍하는 방법을 스스로 가르쳐려고합니다. 그러나 내 시간에는 사전을 사용하여 전화 번호부를 프로그래밍하고이 포럼에서 읽은 피클 기능을 시도하기로 결정했습니다. 그러나 전화 번호부 자체에 대한 사전을 저장하기 위해 피클을 실험 할 때 코드가 "EOFError"를 계속 유지하면서 이것이 무엇인지 또는 해결 방법을 모릅니다. 누군가가 나를 도울 수 있다면 그래서, 난 정말 감사하겠습니다 그것을"Pickle"in python 내 코드에서 오류가 발생합니다.

#My Code 

import pickle 

PhoneBook = {} 
reloaded = {} 

with open("C:\\Programming\\Phone Book.txt", "rb") as inf: #Modify this dependent on   where the file is located 
    reloaded = pickle.load(inf) 

def help(): 
    print "add_contact('name', 'number') - Adds a new contact to your phone book." 
    print "display_phone_book() - Displays the contents of your phone book." 
    print "display_contact('name') - Displays the resident of your phone book with the corrosponding name." 

def add_contact(name, number): 
    PhoneBook [name] = number 
    with open("C:\\Programming\\Phone Book.txt", "wb") as outf: #Modify this dependent on where the file is located 
     pikle.dump(PhoneBook, outf) 

def display_phone_book(): 
    print PhoneBook 

def display_contact(name): 
    print "%s's phone number is:" %(name) 
    print PhoneBook[name] 

#Error's Code: 
def load_eof(self): 
    raise EOFError 
dispatch[''] = load_eof 
+2

오류 게시하시기 바랍니다. – Bioto

+2

또한 실제 코드를 게시하십시오. 이 코드는'pikle.dump'에'NameError'를 발생시킬 것입니다, 아니면 적어도 실제로이 함수들 중 하나를 호출한다면 적어도 될 것입니다. [MCVE] (http://stackoverflow.com/help/mcve)를 참조하십시오. – abarnert

+0

'pikle.dump (전화 번호부, 출력)'는 확실히 작동하지 않습니다. 마지막으로해야 할 일은 무엇입니까? 나는 매우 혼란 스럽다. 당신이 함수와 같은 사전'파견 '에있는''''키의 값을 설정하는 것처럼 보입니까? 당신은 그런 사전이없고, 당신의 기능 중 아무 것도 호출되지 않는다는 것을 제외하고. –

답변

0
그것은 당신이 그것을 사용하는 방법에 문제가 있거나 오류, 또는를 보여 실제 코드를 보지 않고 이야기하기 어렵다

,하지만 ...

프로그램을 처음 실행할 때 PhoneBook.txt에는 아무 것도 없습니다. open 또는 pickle.load 중 하나가 실패합니다. 그리고 프로그램의 첫 번째 행의 처음 몇 줄을 지나갈 수 없기 때문에 문제가 해결 될 방법은 없습니다. 당신은 계속해서 똑같은 실패를 영원히 계속 가져올 것입니다. 이 EACCES 대신 ENOENT, 돈의 경우,

try: 
    with open("C:\\Programming\\Phone Book.txt", "rb") as inf: 
     reloaded = pickle.load(inf) 
except (IOError, EOFError) as e: 
    print('Failed to find old data ({!r}), creating new'.format(e)) 
    reloaded = {} 

당신은 IO 오류에, 예를 들면 자동으로 비트를 처리하는 경우를 (제한 할 수 있습니다 : 그 문제의 경우

, 당신은 아마 이런 식으로 뭔가를 원하는 파일을 비우지 만 손상된 경우 EOFError 대신 KeyError이 표시 될 수 있습니다. 예를 들어, 오류를 무시하고 계속 이동하려고 시도하거나 확장하지 마십시오. 원하는 것이 확실하지 않은 경우 except Exception as e:으로 시작하여 여러 가지 테스트 케이스를 준비하고 각 테스트 케이스에 대해 얻은 결과를 확인하고 어떤 테스트가 실패하는지 결정해야합니다. 처음부터 시작하여 처리했습니다.

+0

귀하의 의견에 대한 이메일을받지 못했기 때문에이 1 년 팩을 게시했습니다. 미안합니다. 이 지난 해 나는 파이썬에 대해 더 많은 경험을 쌓았지만 아직 그 의견이 커다란 도움이되었을 것입니다. 다시 한 번 도움을 주셔서 감사 드리며 나는 지난 1 년 동안 내 우울함에 대해 유감스럽게도 유감스럽게 생각합니다. 아직 이메일을받지 못했지만 아직이 게시물을 확인해야했습니다. 다시 이것을 미안하다. – user3878621

관련 문제