>  기사  >  백엔드 개발  >  `argparse`를 사용하여 부울 값을 정확하게 구문 분석하는 방법은 무엇입니까?

`argparse`를 사용하여 부울 값을 정확하게 구문 분석하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-26 14:05:30518검색

How to Parse Boolean Values Accurately with `argparse`?

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

<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>

위 내용은 `argparse`를 사용하여 부울 값을 정확하게 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.