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

Susan Sarandon
Lepaskan: 2024-10-28 08:11:30
asal
563 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan