2017-04-02 1 views
0

나는 아래의 코드가 작동하지 않는 이유를 잘 모르겠습니다 - 난 .. 난 그 예를 들어, 그래서 만약 명령 행 입력을 구문 분석하려고 getopt를 사용하려고하기 전에getopt가 제대로 작동하지 않습니다. 내가 뭘 잘못하고 있습니까?

NameError: name 'group1' is not defined. 

코드는 잘 작동 오류를 얻을 나는 넣었다.

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을 가진 인수가 전에 다른 인수를 지정 요구 사항이 있습니다 관련 플래그없이 모든 매개 변수는 호출의 끝에 나타납니다 (그리고 args 매개 변수를 통해 검색 할 것이기 때문에

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

당신은 의도 된 행동을 할 것입니다.입니다

관련 문제