>  기사  >  백엔드 개발  >  Python에서 argparse를 사용하여 부울 인수를 올바르게 처리하는 방법은 무엇입니까?

Python에서 argparse를 사용하여 부울 인수를 올바르게 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-28 08:11:30477검색

How to Properly Handle Boolean Arguments with argparse in Python?

argparse에서 부울 인수 처리

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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