argparse를 사용하여 부울 값 구문 분석
argparse를 사용하여 부울 명령줄 인수를 구문 분석할 때 원하는 동작이 다른 시나리오에 직면하는 것이 일반적입니다. 실제 출력에서. 이는 인수가 "--foo True" 또는 "--foo False"로 지정된 경우 발생합니다.
이 문제를 해결하려면 코드를 더 깊이 파고드는 것이 중요합니다.
<code class="python">import argparse parser = argparse.ArgumentParser(description="My parser") parser.add_argument("--my_bool", type=bool) cmd_line = ["--my_bool", "False"] parsed_args = parser.parse(cmd_line)</code>
놀랍게도 인수로 "False"를 지정했음에도 불구하고,parsed_args.my_bool은 True로 평가됩니다. cmd_line이 논리적으로 False로 평가되어야 하는 ["--my_bool", ""]로 수정된 경우에도 이 예외 현상이 지속됩니다.
해결 방법
이 문제를 극복하려면 부울 값을 정확하게 구문 분석하려면 보다 일반적인 스타일을 채택하는 것이 좋습니다.
command --feature
그리고
command --no-feature
argparse는 다음 형식을 쉽게 지원합니다.
Python 3.9 이상:
<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>
Python 3.9 이하:
<code class="python">parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True)</code>
또는 "--arg 위 내용은 `argparse`를 사용하여 부울 값을 정확하게 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!<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:
pass #error condition maybe?</code>