2017-04-02 31 views
0

我不知道为什么下面的代码不工作 - 我得到的错误getopt不太能工作,我做错了什么?

NameError: name 'group1' is not defined. 

的代码能正常工作之前,我试图用getopt的..我试图解析命令行输入,以便例如,如果我把

python -q file1 file2 -r file3 file4 

file1和file2成为我的第一个循环输入为'group1'。

import sys 
import csv 
import vcf 
import getopt 
#set up the args 
try: 
    opts, args = getopt.getopt(sys.argv[1:], 'q:r:h', ['query', 'reference', 'help']) 
except getopt.GetoptError as err: 
    print str(err) 
    sys.exit(2) 

for opt, arg in opts: 
    if opt in ('-h', '--help'): 
     print "Usage python -q [query files] -r [reference files]" 
     print "-h this help message" 
    elif opt in ('-q', '--query'): 
     group1 = arg 
    elif opt in ('-r', '--reference'): 
     group2 = arg 
    else: 
     print"check your args" 

#extract core snps from query file, saving these to the set universal_snps 
snps = [] 
outfile = sys.argv[1] 
for variants in group1: 

    vcf_reader = vcf.Reader(open(variants)) 

回答

0

的问题是,group1 = arg从未运行,因此当它以后到达for variants in group1:,没有定义的变量。

这是因为您错误地调用了函数来定义选项。当你有行:

opts, args = getopt.getopt(sys.argv[1:], 'q:r:h', ['query', 'reference', 'help']) 

存在与标志(即-q file1-r file3参数指定之前任何其他参数的要求。因此,如果你要调用该函数为:

python <scriptName> -q file1 -r file3 file2 file4 

您将有预期的行为。这是因为没有相关的标志所有参数显示在通话结束(和将通过args参数可检索

相关问题