2012-04-07 6 views
0

optparse 모듈에서 경로 값 (예 : 빌드)을 사용하는 옵션이 있습니다.문자열 입력을 '없음'으로 처리하는 방법 Nonetype

문제점 :이 옵션이 없음이지만 하나만 통과하면 실패합니다. --build = None입니다. 이유 : optparse의 기본 유형은 string입니다. 따라서 build = 'None'즉 값 없음 인 문자열 유형을 설정합니다.

한 가지 방법은 평가() 메소드를 사용하는 것입니다하지만 또는 내가 을 할 수있는 사람이 합법적 인 경로를 제공하는 경우가 실패하면 빌드 또는 build.lower() == '없음'그때 '

그러나 기본적으로 문자열 입력을받는 다른 모든 옵션에 대해서도이 작업을 수행합니다. 더 좋은 방법이 있습니까? 친절한 조언.

+0

가 나는'NONE', 당신은 무엇을'function'에 확인하기 위해'dictionary'에서 조회 할 수없는 당신이 그렇게 빨리하는'dictionary'를 사용하여 작동하려면'string' 입력을 매핑 할 수 있습니다 생각 요구. 그러나 커맨드 라인 인수에서 왔기 때문에'optparse' 또는'argparse'를 고집하는 것이 가장 좋습니다 : http://docs.python.org/library/argparse.html#module-argparse – George

+0

코드를 볼 수 있습니까? ? –

답변

2

나는 약간의 문제가 무엇인지 혼란스러워 ... 여기에 내가 함께 모아 놓은 코드가있다.

>>> import optparse 
>>> import shlex 
>>> parser = optparse.OptionParser() 
>>> parser.add_option('--build',type=str,default=None) 
<Option at 0x...: --build> 

"명령 줄"에 --build 옵션을 제공하십시오. "명령 줄"

>>> print options 
{'build': None} 
>>> options.build is None 
True 

에 주어진

>>> options, args = parser.parse_args(shlex.split("--build=None")) 
>>> print options 
{'build': 'None'} 
>>> options.build is None 
False 
>>> options, args = parser.parse_args(shlex.split("")) 

없음 --build 옵션 당신이 볼 수 있듯이, --build는 명령 줄에 제공되지 않은 경우 (유형 NoneType와 즉, 객체) None 기본값. build가 제공되고 문자열 == "None"이면 문자열 "None"을 반환합니다.

--build=None을 명령 줄에 전달해야한다면 optparse가 해당 플래그로 수행하기를 원하는 것이 조금 모호합니다. 예를 들어 경로 인 경우 없음 경로가 존재하는지 확인하는 함수를 작성할 수 있습니다.

import os.path 
def path_exists(p): 
    if(os.path.exists(p)): return p 
    else: return None 
... 
parser.add_option('--build',type=path_exists,default=None) 

물론 path_exists는 응용 프로그램에 대해 원하는만큼 복잡 할 수 있습니다.

0

어떤 이유에서든 실제로는 None 또는 다른 명백한 값이 아닌 다른 값이 필요하기 때문에 mgilson의 대답은 유용하지 않습니다. 예를 들어 defautl을 ~/.foorc과 같은 것으로 사용하려는 경우, 사용하는 경향이있는 해결책은 대신 다른 "해제"옵션을 추가하는 것입니다. 일반적으로 부정으로 접두사를 붙입니다.

물론
>>> options, args = parser.parse_args(shlex.split("--no-build")) 
>>> print options 
{'build': None} 
>>> options.build is None 
True 

, 당신은 여전히 ​​기본값을 대체 할 수있는 모든

>>> options, args = parser.parse_args(shlex.split("")) 
>>> print options 
{'build': '~/.foorc'} 
>>> options.build 
'~/.foorc' 

--no-build 옵션을 사용할 수 있습니다 후

>>> import optparse 
>>> import shlex 
>>> parser = optparse.OptionParser() 
>>> parser.add_option('--build', type=str, default="~/.foorc") 
<Option at 0x...: --build> 
>>> parser.add_option('--no-build', 
...     dest="build", 
...     action="store_const", 
...     const=None) 
<Option at 0x...: --no-build> 

현명한 기본 옵션은 선택 사항입니다.

>>> options, args = parser.parse_args(shlex.split("--build=something")) 
>>> print options 
{'build': 'something'} 
>>> options.build 
'something'