2017-01-23 11 views
1

동일한 유형의 여러 명령 행 인수를 사용하여 처리를 위해 for 루프에 피드하는 스크립트를 작성하려고합니다. 아래는 제가 가지고있는 것입니다. 내 코드 :parser_args 값을 사용하여 for 루프 (Python 3.6)를 입력하십시오.

TypeError: 'Namespace' object is not iterable 

리스트로를 설정하는 방법은 없나요 :

import argparse 

parser = argparse.ArgumentParser(description='XYZ') 
parser.add_argument('[values]', nargs='+', help='A list of values') 

u = parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

for values in u: 
    ... # do a bunch of stuff for each "value" 

나는 경우 parse_args에 저장된 값은 네임 스페이스, 내 코드를 실행하면 아래 따라서 오류가 있음을 이해 목적? 그래서 for 루프로 전달할 수 있습니까? 아니면 다른 접근법을 사용해야합니까? 그냥 파이썬으로 시작하기 때문에 사전에 사과해야한다. 이것이 멍청한 질문이라면

+0

어떤 값 유형을 반복 하시겠습니까? –

답변

2

u.values (add_argument 호출에서 지정한 인수 이름)이 아닌 u을 반복해야한다. 당신이 [values]values에 이름을 바꿀 필요가 있다고하려면 : 클래스 argparse.namespace의 객체의 간단한에 구문 분석에서

import argparse 

parser = argparse.ArgumentParser(description='XYZ') 
parser.add_argument('values', nargs='+', help='A list of values') 
#     ^^^^^^^^ 

u = parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

for value in u.values: 
    #  ^^^^^^^^ 
    # do a bunch of stuff for each "value" 
+0

질문에 python3.x 태그가 붙어 있지만 (그리고 python3.6을 언급합니다.)이 솔루션은 python2.7 +에서 작동합니다. –

0

값 (사용자 정의 할 수 있습니다 - 워드 프로세서 참조).

일반적으로 이러한 값은 속성 이름 (예 : args.foo. 특이한 이름의 경우 많은 사람들이 getattr(args, '[values]')을 사용해야합니다.

간단한 경우 인수 값은 단일 문자열 또는 숫자입니다. '*'또는 '+'와 같은 nargs을 사용하면 값이 목록에 표시됩니다. append 액션 유형을 사용하면 목록 내에 목록을 가져올 수도 있습니다.

사용자가 args 네임 스페이스를 인쇄하는 것이 좋습니다. 당신의 '이명 령'으로

In [2]: parser = argparse.ArgumentParser(description='XYZ') 
    ...: parser.add_argument('[values]', nargs='+', help='A list of values').... 
In [3]: args =parser.parse_args(['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

In [4]: print(args) 
Namespace([values]=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

나는 args에서 문자열의 목록을 가져 오기 위해 getattr을 사용해야합니다. 당신이 속성을 추가하거나 기존 수정할 수 있도록

In [5]: getattr(args,'[values]') 
Out[5]: ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 

args는 단순한 객체입니다. 예 : 당신이 사전에 더 잘 알고있는 경우

In [6]: args.values = ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 
In [7]: print(args) 
Namespace([values]=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'], 
    values=['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q']) 

, 당신은 vars()를 사용할 수 있습니다

In [9]: vars(args)['values'] 
Out[9]: ['3crlV5QaiuUjRz5kWze', 'F9Xw0rggHZ_PLs62q'] 

재생 주위에 이런 종류의 대화 형 파이썬 세션.