2011-10-28 5 views
0

getopt를 사용하여 명령 줄 인수를 추출하는 스크립트를 작성하고 제공된 값을 한정 한 다음 해당 값을 루프의 제한으로 사용합니다. 코드 조각은 다음과 같습니다.파이썬 내장 범위 함수 및 변수 값

try: 
    start_pod, end_pod, topo_value = map(int, args) 
except ValueError, error_msg: 
    if 'invalid' in str(error_msg): 
     err_funct('Non-integer values supplied: {%s}' % args) 
    else: 
     err_funct(error_msg) 

for pod in range(start_pod, end_pod): 
    print 'value of pod: %s' % pod 
    for switch in range(1,5): 
     print 'value of switch: %s' % switch 

문제점은 '범위'기능입니다. 나는 그것을 전달할 정수 (지도 함수를 정수로 문자열 목록을 변환하는 것 같아요) 및 내 시도/예외 처리기 종료 방법으로 오류 함수 방법으로 내가 쓴 있지만 어떤 이유로이 작동하지 않는 경우 .

스크립트를 올바른 입력 수로 호출하면 (예 : 'some_script.py 1 1 5', 스크립트는 아무것도 반환하지 않습니다.

답변

2

스크립트 귀하의 호출이 올바르지 않습니다

>>> range(1,1) 
[] 

(start_podend_pod은 모두 1이 될 것이다).

range(i,j) 함수는 다음 목록을 반환합니다. [i, i + 1, .., j - 1]. 또는 달리 말하면 끝점은 항상 제거됩니다. 에 for pod in range... 라인을 변경

시도 :

for pod in range(start_pod, end_pod + 1): 
1

당신이 독립적 인 예를 붙여 주시기 바랍니다. 당신은 분명히 중요한 부분을 놓치고 있습니다 - args는 무엇입니까?

나는 순진하게도 예 당신이 바로 당신의 인수에지도를주고 상단에 추가하는 것이 가정하면 : 방금 말했듯이

args = ['1', '1', '5'] 

는 다음의 동작 - 아니 출력.

그러나 start_pod와 end_pod가 동일하기 때문에 원하는 내용이 아닐 수도 있습니다. 대신 내가

args = ['1', '5', '1'] 

을 할 경우

는 내가 출력을 얻을. 어떤 args가 주어진 명령 행으로 코드에 접근하고 있습니까 (해당 블록 바로 앞에있는 코드에서 repr (args)를 인쇄하십시오). 그리고 그 결과물에서 기대할 수있는 출력은 무엇입니까?