Python의 argparse 모듈을 사용하면 명령줄에서 인수 구문 분석을 단순화할 수 있습니다. 부울 플래그 구문 분석을 지원하지만 특정 시나리오에서는 예상치 못한 결과가 발생할 수 있습니다.
"--foo True" 또는 "--foo False"와 같은 부울 값을 올바르게 구문 분석하려면 argparse의 기본 동작으로는 충분하지 않을 수 있습니다. 예를 들어, type=bool만 사용하면 인수가 "False" 또는 빈 문자열로 설정된 경우 예상치 못한 결과가 발생할 수 있습니다.
한 가지 해결책은 Python 3.9에 도입된 BooleanOptionalAction을 활용하는 것입니다. 이 작업은 부울 값을 보다 직관적으로 처리하여 True, t, y, yes, 1을 True로, False, f, n, no, 0을 False로 자동 변환합니다.
이전 Python 버전의 경우 3.9에서는 'store_true' 및 'store_false' 작업을 결합하는 것이 해결 방법입니다. 'store_true' 작업은 플래그가 있으면 True로 설정하고, 'store_false'는 플래그를 False로 설정합니다. 기본적으로 플래그는 True로 가정되어 사용자가 양수 플래그와 음수 플래그를 모두 지정할 수 있습니다.
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True) cmd_line = ["--no-feature"] parsed_args = parser.parse_args(cmd_line) if parsed_args.feature: print("Feature is True.") else: print("Feature is False.")</code>
또는 특정 구문 분석 논리를 처리하도록 사용자 정의 함수를 정의할 수 있습니다. 예를 들어, 대소문자를 구분하지 않고 "True"와 "False"를 구별하는 함수:
<code class="python">def t_or_f(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: raise ValueError("Invalid argument: {}".format(arg))</code>
이 함수는 argparse의 유형 매개변수와 함께 사용할 수 있습니다:
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument('--my_bool', type=t_or_f) cmd_line = ["--my_bool", "False"] parsed_args = parser.parse_args(cmd_line) if parsed_args.my_bool: print("my_bool is True.") else: print("my_bool is False.")</code>
위 내용은 Python에서 argparse를 사용하여 부울 인수를 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!