Soalan:
Apabila menghuraikan argumen baris arahan boolean dengan argparse, mengapa nilai seperti "--foo False" menilai kepada Betul dan bukannya Salah?
Jawapan:
Kaedah Kanonik:
The pendekatan yang disyorkan ialah menggunakan format berikut:
command --feature
Untuk menafikan ciri, gunakan:
command --no-feature
argparse menyediakan sokongan terbina dalam untuk ini:
Python < 3.9:
parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True)
Kaedah Alternatif untuk Penghuraian Tersuai:
Jika format "--foo True/False" diutamakan, satu pilihan ialah menggunakan ast.literal_eval atau fungsi tersuai sebagai jenis:
import ast def t_or_f(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: pass # Handle error condition appropriately
<code class="python">parser.add_argument("--my_bool", type=ast.literal_eval) parser.add_argument("--my_bool", type=t_or_f)</code>
Fungsi tersuai ini mentafsirkan huruf besar Benar/Salah sebagai nilai boolean, membenarkan penghuraian fleksibel bagi nilai ini.
Atas ialah kandungan terperinci Mengapakah '--foo False' Menilai kepada Benar Apabila Menghuraikan Argumen Boolean dengan argparse?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!