2014-04-11 1 views
0

title, director, length (동영상의 길이 (분)) 속성을 갖는 클래스 Movie를 정의하는 프로그램을 작성하십시오. Movie 클래스의 5 개의 객체를 만들고 피클 링하여 파일에 저장합니다.Pickle이 작동하지 않아서 생성 된 txt 파일이 비어 있습니다.

#!/usr/local/bin/python 
import pickle 
class Movies: 
    def __init__(self,title,director,length): 
     self.x=title 
     self.y=director 
     self.z=length 

def main(): 
    movie1 = Movies(1,100,10) 
    movie2 = Movies(2,200,20) 
    movie3 = Movies(3,300,30) 
    movie4 = Movies(4,400,40) 
    movie5 = Movies(5,500,50) 

main() 

import pickle 
try: 
    file=open("movies.txt","w") 
    fold =[movie1,movie2,movie3,movie4,movie5] 
    pickle.dump[fold,file] 

except IOError: 
    print("file could not be open") 
except ValueError: 
    print("could not make list") 
except: 
    print("some unknown error") 
else: 
    print("successfully done!") 
finally: 
    print("printing always") 
    file.close() 

모든 것이 제대로 작동하지만 movies.txt 파일이 비어 있습니다. 나는 파이썬에 익숙하지 않으므로 예외 처리에 대한 경험이 적다. 하지만 내가 이해 한 것에서는 절임이 작동하지 않습니다.

+3

'pickle.dump [...]'는'pickle.dump (...)'이어야합니다 - 대괄호에주의하십시오. 나는 [이전 질문에 대한] 같은 조언을 (http://stackoverflow.com/questions/23008271/python-reverse-sentence-and-write-it-in-another-file) -' try 블록. 'try '로 모든 것을 감싼다면, 잘못되어 가고있는 것을 정확히 알아내는 것은 불가능합니다. 맨손으로 [except] (http://blog.codekills.net/2011/09/29/the-evils-of--except--/)를 읽으십시오. – jonrsharpe

답변

1

main 함수에서 무비 변수를 정의하지만 try 블록을 정의하는 범위에 해당 변수가 없습니다. 또한 질문의 주석에서 언급 한대로 잘못된 구문을 사용하여 pickle.dump으로 전화를 걸고 있습니다. 괄호를 사용하고 대괄호를 사용하지 않아야합니다 (예 : pickle.dump(fold,file)).

마지막으로 블록을 main 함수로 이동하면 정상적으로 작동합니다. 이와 같이 :

def main(): 
    movie1 = Movies(1,100,10) 
    movie2 = Movies(2,200,20) 
    movie3 = Movies(3,300,30) 
    movie4 = Movies(4,400,40) 
    movie5 = Movies(5,500,50) 

    import pickle 
    try: 
     file=open("movies.txt","w") 
     fold =[movie1,movie2,movie3,movie4,movie5] 
     pickle.dump(fold,file) 

    except IOError: 
     print("file could not be open") 
    except ValueError: 
     print("could not make list") 
    except: 
     print("some unknown error") 
    else: 
     print("successfully done!") 
    finally: 
     print("printing always") 
     file.close() 

main() 

코드에는 여전히 스타일 문제가 있지만이 코드를 사용하면 도움이됩니다.

+0

프로그램이 "일부 알려지지 않은 오류"를 출력하게해야합니다 ... 예외는 코드 스 니펫이 'SyntaxError'때문에 실행되지 않는다는 것입니다. –

+0

pickle.dump에서 'SyntaxError'가 없습니다. '__getitem__' 메쏘드를 가진 객체가 많이 있습니다. 파이썬은 피클에 도달하지 않을 때까지 알지 못합니다. – ramcdougal

+0

@ramcdougal : 당신은 완벽하게 맞습니다. 제 커피 ... 분명히 다른 커피가 필요합니다. -하지만 제출 된 코드는'try' 블록의 두 번째 줄에'NameError' 때문에 "알 수없는 오류"를 출력해야합니다 . –

관련 문제