2017-03-28 7 views
0

私はピックリングをテストしています& getOptsは、それぞれ個別に成功しましたが、今は2つを組み合わせようとしています。以下は、私がやっているの抜粋ですPython: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() 

と私は「-l」フラグを使用して実行しようとしたとき、私は、しかし、次のコード

#! /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() 

を使用し、データを酸洗するとき次のエラーが表示されます

NameError: global name 'usage' is not defined 

なぜこのようなことが起こっているのでしょうか?前もって感謝します!

答えて

3

定義していない関数(usage())を呼び出しています。この関数を実装する必要があります。そうでなければ、コードは実行されません。