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!