2017-03-28 1 views
0

나는 pickling & getOpts를 테스트하고 있으며, 각각 개별적으로 성공했지만 이제는 두 가지를 결합하려고하는데 문제가있다. 아래는 내가 뭘하는지의 조각,파이썬 : pickle과 getOpt의 오해.

#! /usr/bin/env python 

from itertools import groupby, chain 
import pickle 
import getopt 
import sys 

def main(): 

    # default values 
    var1 = 6 
    var2 = 7 
    var3 = 4 

    try: 
     opts, args = getopt.getopt(sys.argv[1:], 'l:z', ['load=', 'help']) 
    except getopt.GetoptError: 
     usage() 
     sys.exit(2) 

    for opt, arg in opts: 
     if opt in ('-z', '--help'): 
      usage() 
      sys.exit(2) 
     elif opt in ('-l', '--load'): 
      pkl_file = open('data.pkl', 'rb') 
      settings = pickle.load(pkl_file) 
      var1 = settings[0] 
      var2 = settings[1] 
      var3 = settings[2] 
      pkl_file.close() 
     else: 
      usage() 
      sys.exit(2) 

    print ("\nthe values are as follows") 
    print ("cvar1: " + str(var1)) 
    print ("var2: " + str(var2)) 
    print ("var3: " + str(var3)) 

if __name__ == "__main__": 
    main() 

이고 나는 다음과 같은 코드 그러나

#! /usr/bin/env python 

import pickle 

settings = [3, 15, 4] 

output = open('data.pkl', 'wb') 

# Pickle dictionary using protocol 0. 
pickle.dump(settings, output) 

output.close() 

를 사용하는 데이터를 산세 때, 나는 '-l'플래그를 실행하려고하면, 다음과 같은 오류가 발생합니다.

NameError: global name 'usage' is not defined 

왜 이런 일이 발생하는지 알고 싶습니다. 미리 감사드립니다!

답변

3

정의하지 않은 함수 (usage())를 호출하고 있습니다. 이 함수를 구현해야합니다. 그렇지 않으면 코드가 실행되지 않습니다.