Menghuraikan Nilai Boolean dengan argparse
Dalam argparse, menghuraikan hujah baris arahan boolean ialah tugas biasa, tetapi perangkap biasa timbul apabila mencuba untuk menghuraikan nilai seperti "--foo True" atau "--foo False" menggunakan hujah type=bool. Anehnya, walaupun apabila menggunakan rentetan kosong sebagai argumen (cth., "--foo " "), nilai yang dihuraikan dinilai kepada Benar.
Untuk penghuraian Boolean yang betul, argparse menawarkan dua pendekatan yang disyorkan:
Pendekatan Kanonik:
Gunakan sintaks '--feature' dan '--no-feature', disokong secara asli oleh argparse dalam Python 3.9 dan ke atas:
<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>
Dalam versi Python di bawah 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>
Dengan pendekatan ini, kehadiran '--feature' menetapkan nilai kepada True, manakala '--no-feature' menetapkannya kepada False. Ketiadaan mana-mana hujah lalai kepada Benar.
Pendekatan Pilihan (Menggunakan Penukaran Jenis):
Jika sintaks "--arg
<code class="python">parser.add_argument("--arg", type=ast.literal_eval)</code>
Sebagai alternatif, fungsi yang ditentukan pengguna boleh dibuat:
<code class="python">def true_or_false(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: raise argparse.ArgumentTypeError('Invalid boolean value')</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Nilai Boolean dengan Betul dalam argparse?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!