Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengendalikan Argumen Boolean dengan betul dengan argparse dalam Python?

Bagaimana untuk Mengendalikan Argumen Boolean dengan betul dengan argparse dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-10-28 08:11:30477semak imbas

How to Properly Handle Boolean Arguments with argparse in Python?

Mengendalikan Argumen Boolean dalam argparse

Menghuraikan argumen daripada baris arahan boleh dipermudahkan menggunakan modul argparse dalam Python. Walaupun ia menyokong menghuraikan bendera boolean, senario tertentu boleh membawa kepada hasil yang tidak dijangka.

Untuk menghuraikan nilai boolean dengan betul seperti "--foo True" atau "--foo False", gelagat lalai argparse mungkin tidak mencukupi. Sebagai contoh, menggunakan type=bool sahaja boleh menghasilkan hasil yang tidak dijangka apabila argumen ditetapkan kepada "False" atau rentetan kosong.

Satu penyelesaian ialah memanfaatkan BooleanOptionalAction yang diperkenalkan dalam Python 3.9. Tindakan ini menyediakan pengendalian nilai boolean yang lebih intuitif, menukar True, t, y, yes dan 1 secara automatik kepada True, dan False, f, n, no dan 0 kepada False.

Untuk versi Python sebelum ini 3.9, penyelesaian melibatkan menggabungkan tindakan 'store_true' dan 'store_false'. Tindakan 'store_true' menetapkan bendera kepada True apabila hadir, manakala 'store_false' menetapkannya kepada False. Secara lalai, bendera diandaikan sebagai Benar, membenarkan pengguna menentukan kedua-dua bendera positif dan negatif:

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

Sebagai alternatif, fungsi tersuai boleh ditakrifkan untuk mengendalikan logik penghuraian tertentu. Contohnya, fungsi yang membezakan antara "Benar" dan "Salah" tanpa peka huruf besar-kecil:

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

Fungsi ini kemudiannya boleh digunakan dengan parameter jenis 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>

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Argumen Boolean dengan betul dengan argparse dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn