मैं टाइप स्ट्रिंग का तर्क जोड़ना चाहता हूं लेकिन स्ट्रिंग की लंबाई को 1 तक सीमित करना चाहता हूं।

   group.add_argument(
        "--test_param",
        dest="test_param",
        type=str,
        required=True,
        default=None,
    )

क्या बाद में len(test_param) की जांच करके कोई त्रुटि उत्पन्न किए बिना मैं इसे यहां कर सकता हूं?

1
user2548987 21 नवम्बर 2019, 16:54
1
एक कस्टम type फ़ंक्शन की आवश्यकता है; ऐसा नहीं है कि पार्सिंग के बाद परीक्षण में कुछ गड़बड़ है।
 – 
hpaulj
22 नवम्बर 2019, 00:12

2 जवाब

आप type में lambda फ़ंक्शन का उपयोग करने का प्रयास कर सकते हैं

उदा:

import argparse

group = argparse.ArgumentParser(description='Data.')
group.add_argument( 
        "--test_param",
        dest="test_param",
        type=lambda x: x if x.isalpha() and len(x) <=1 else False,   #Sample Function
        required=True,
        default=None,
    )

args = group.parse_args()
value = getattr(args, 'test_param')
if value:
    print(value)
else:
    print("error!!!")

आउटपुट:

python sample.py --test_param fddd  #->>error!!
python sample.py --test_param f     #->>f
2
Rakesh 21 नवम्बर 2019, 17:19

आप मेरे कोड में उदाहरण के लिए एक तर्क जोड़ते समय उपलब्ध विकल्प तर्क का उपयोग कर सकते हैं, मैं सिर्फ 1 या 2 से चयन करना चाहता हूं। मैंने निम्नलिखित स्निपेट का उपयोग इस प्रकार किया:

parser.add_argument(
    "report",
    type=int,
    metavar="[report #]",
    help="1. for Annual Max/Min Temperature 2. for Hottest day of each year",
    choices=[1, 2]

)

यह केवल इन विकल्पों से इनपुट को प्रतिबंधित करेगा और त्रुटि परिणाम दिखाएगा यदि आपने इन विकल्पों में से इस तरह से दिया है:

usage: [report#] [data_dir]

[report #]
1 for Annual Max/Min Temperature
2 for Hottest day of each year
            
[data_dir]
Directory containing weather data files
        
main.py: error: argument [report #]: invalid choice: 3 (choose from 1, 2)

यदि आप विकल्पों को जोड़ना नहीं चाहते हैं तो आप डेटा को मान्य करने के लिए लैम्डा या फ़ंक्शन का उपयोग कर सकते हैं। आप नीचे दिए गए मेरे उदाहरण से सहायता प्राप्त कर सकते हैं:

parser.add_argument(
        "data_dir",
        type=check_directory_availability,
        metavar="[data_directory]",
        help="Directory containing weather data files",
    )
def check_directory_availability(dir_name):

    if not os.path.isdir(dir_name):
        raise NotADirectoryError("Provided directory name doesn't exists")
    return dir_name

आशा है कि यह आपकी मदद कर सकता है।

0
Software Engineer 30 अक्टूबर 2020, 16:46
लेकिन इसके लिए मुझे विकल्पों में सभी संभावित सिंगल कैरेक्टर स्ट्रिंग्स की सूची शामिल करने की आवश्यकता होगी, जो कि बोझिल है।
 – 
user2548987
30 अक्टूबर 2020, 12:00
मैंने इस प्रश्न का उत्तर जोड़ा है। आप इसे भी देख सकते हैं।
 – 
Software Engineer
30 अक्टूबर 2020, 16:47