2013-02-21 6 views
0

일부 argparse 코드를 테스트하고 있습니다. 선택 목록에서 n 개의 입력을 수집하는 선택적 인수가 필요했습니다. 그래서, 내가 쓴이와argparse로 인터프리터를 죽입니다.

import argparse 

modules = ["geo", "loc"] 
parser = argparse.ArgumentParser() 
parser.add_argument("--modules", nargs='*', choices=modules) 

는 설정, 나는 확실하게 완전히 인터프리터를 죽일 수 있어요.

당신이 인수의 유효한 세트를 전달하면 그것은 잘 작동 :

>>> parser.parse_args("--module geo loc geo".split()) 
Namespace(modules=['geo', 'loc', 'geo']) 

당신이 미스 형성 인수를 전달한다면, 그것은 파이썬이 완전히 죽이기 :

>>> parser.parse_args("--module geo metro".split()) 
usage: [-h] [--modules [{geo,loc} [{geo,loc} ...]]] 
: error: argument --modules: invalid choice: 'metro' (choose from 'geo', 'loc') 
PS C:\Users\myname\mycode> 

내 질문은 2 차원입니다 fold :

  1. 이 예상되는 동작입니까? 그렇다면이 이유는 무엇입니까?
  2. 내 프로그램이 부적절한 주장으로 인해 죽을지라도이 코드를 사용해도 될까요? 아니면 이것을 피할만한 이유가 있습니까? 파이썬 스크립트를 명령 줄에서 실행할 때 참고로

, 나는 윈도우 7

+0

'parser_args'는'sys.exit'를 호출하는'error' 함수를 호출합니다. 그래서 당신은 그 행동을 얻습니다. – mmgp

답변

3
  1. 예, 이것은 의도 및 설명되어 있습니다

    명령 줄 경우 parse_args()를 모호한 옵션, 유효하지 않은 유형, 유효하지 않은 옵션, 잘못된 번호를 포함하여 다양한 오류를 검사, 분석하는 동안 이러한 오류가 발생하면 사용법 메시지와 함께 오류를 종료하고 인쇄합니다.

    사용자가 잘못된 옵션이나 인수를 제공하면 핸들하는 법을 아는, 최선의 선택 사용자의 실제 의도를 추측하지 말고 포기해야합니다.

  2. 괜찮 으면 괜찮을까요? 다른 행동을 구현해야하는 이유를 알지 못하는 한, 프로그램은 모든 플랫폼에서 잘 작동하는 모든 명령 행 도구와 완전히 일치합니다. 당신은 다른 동작을 구현하려는 경우

parse_args 올리 수 있다는 SystemExit 예외를 잡을 수있어.

(방금 설명한 프로그램은 버전 제어 도구 인 Git입니다. 사용자가 의도 한 것을 추측 해보고 그 추측을 인쇄합니다. 그런 다음 여전히 종료됩니다.)

1

argparse에 Python2.7를 사용하고는 사용을 위해 설계되었습니다. 이것이 잘못된 인수로 인해 프로그램이 중단되는 이유입니다.

이 동작은 거의 모든 쉘 (bash/sh/dos/etc.) 유틸리티와 일치합니다. 잘못된 명령 행 인수는 프로그램이 오류 문자열 및 (선택적으로) 사용법 메시지로 종료하도록합니다.

관련 문제