Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีจำกัดค่า argument ด้วย choices ใน Python argparse

บทนำ

สมมติว่าเราต้องเขียนโปรแกรมรับจำนวนแชมป์แกรนด์สแลมเทนนิสจากผู้ใช้ จำนวนสูงสุดคือ 20 (เฟเดอเรอร์และナダล) ส่วนต่ำสุดคือ 0 เราต้องการจำกัดให้ผู้ใช้ป้อนได้เฉพาะช่วง 0-20 เท่านั้น

ตัวอย่างโดยไม่มี choices

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='Example for one positional arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('titles', metavar='titles', type=int, help='GrandSlam Titles')
    return parser.parse_args()

def main(titles):
    print(f" *** Player had won {titles} GrandSlam titles.")

if __name__ == '__main__':
    args = get_args()
    main(args.titles)

โปรแกรมจะยอมรับค่าใดก็ได้ รวมถึงค่าลบหรือเกิน 20

ใช้ choices จำกัดช่วงค่า

import argparse

def get_args():
    parser = argparse.ArgumentParser(
        description='Example for one positional arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('titles', metavar='titles', type=int,
                        choices=range(0, 20), help='GrandSlam Titles')
    return parser.parse_args()

def main(titles):
    print(f" *** Player had won {titles} GrandSlam titles.")

if __name__ == '__main__':
    args = get_args()
    main(args.titles)

ผลลัพธ์

>> python test.py 30
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: 30 (choose from 0, 1, 2, ... 19)

>>> python test.py 10
*** Player had won 10 GrandSlam titles.

>>> python test.py -1
usage: test.py [-h] titles
test.py: error: argument titles: invalid choice: -1 (choose from 0, 1, 2, ... 19)

สรุป

  • choices รับลิสต์ของค่าที่อนุญาต argparse จะหยุดโปรแกรมถ้าค่าไม่อยู่ในลิสต์
  • สามารถใช้กับสตริงได้เช่นกัน เช่น choices=['federer', 'nadal', 'djokovic']