मेरे पास एक बहुत ही सरल कार्य है, जो इनपुट के रूप में एक स्ट्रिंग लेता है, मैंने फ़ंक्शन पर एक चेक लगाने की कोशिश की ताकि यदि फ़ंक्शन तर्क स्ट्रिंग नहीं है तो यह फेंक देगा एक त्रुटि, अन्यथा स्ट्रिंग लौटाएं।

अभी समस्या यह है कि, जब मैं एक int पास करता हूं, तो मुझे उम्मीद है कि फ़ंक्शन एक त्रुटि प्रदर्शित करेगा लेकिन यह केवल int का टपल आउटपुट करता है। मैं यहाँ क्या गलत कर रहा हूँ?

def speak(*languages):

    """Function takes a set of langs as input  and returns a list of languages"""
    
    try:
        if  type(languages) ==  str:
            languages = list(languages)
    except TypeError as error:
        print(error, ' You need to pass in the right datatype')
    else:
        return languages

मैंने यह भी कोशिश की।

def speak(*languages):

    """Function takes a set of langs as input  and returns a list of languages"""
    
    try:
        if  isinstance(languages, str):
            languages = list(languages)
    except TypeError as error:
        print(error, ' You need to pass in the right datatype')
    else:
        return languages

मैं बोलें फ़ंक्शन को निम्न तरीकों से कॉल कर रहा हूं।

  1. स्पीक ('अंग्रेज़ी') - अपेक्षित आउटपुट english होना चाहिए
  2. स्पीक ('इंग्लिश', 'फ्रेंच') - अपेक्षित आउटपुट english और french होना चाहिए
  3. बोलो (३४) - मुझे उम्मीद है कि फ़ंक्शन एक त्रुटि फेंक देगा
0
Chukwuka Okolie 10 जुलाई 2021, 00:22

4 जवाब

सबसे बढ़िया उत्तर

अपने उदाहरण कॉल प्रदान करने के बाद, ऐसा लगता है कि आप स्ट्रिंग-प्रकार के लिए सभी तर्कों की जांच करना चाहते हैं, न कि एक तर्क। सही?

आप उसके लिए any का उपयोग कर सकते हैं, जो कि सत्य होगा यदि कोई सूची/जनरेटर मान सत्य है। जनरेटर की समझ में आप isinstance सभी (स्थितीय) तर्कों पर प्रदर्शन कर सकते हैं

def speak(*languages):
    """Function takes a set of langs as input  and returns a list of languages"""
    
    if any(not isinstance(lang, str) for lang in languages):
        raise TypeError('You need to pass in the right datatype')

    return list(languages)
>>> speak('english')
>>> speak('english', 'french')
>>> speak(34)
Traceback (most recent call last):
  File "<string>", line 14, in <module>
  File "<string>", line 5, in speak
TypeError: You need to pass in the right datatype
3
DevLounge 9 जुलाई 2021, 22:17

मुझे नहीं लगता कि यहां कोशिश-छोड़कर की जरूरत है। शायद इस तरह कुछ कोशिश करें (आपके तर्क के बाद):

def speak(*languages):

    """Function takes a set of langs as input  and returns a list of languages"""
    for lang in list(languages):
        if not isinstance(lang, str):
            print(' You need to pass in the right datatype')
            return
    else:
        languages = list(languages)
        return languages

print(speak('english')) # english
print(speak('english', 'french')) # english and french
print(speak(34)) # error
0
mkrieger1 9 जुलाई 2021, 22:22

न तो type(languages) == str और न ही isinstance(languages, str) TypeError फेंकेंगे, इसलिए आपका except कभी हिट नहीं होगा। आपके if के बाद आपको बस एक else चाहिए:

def speak(*languages):
    """Function takes a set of langs as input and returns a list of languages"""

    if isinstance(languages, str):
        return list(languages)
    else:
        raise TypeError('You need to pass in the right datatype')

नोट: मुझे नहीं लगता कि आप ऊपर list(languages) चाहते हैं - list("a str") ['a', ' ', 's', 't', 'r'] देता है। लेकिन मैंने इसे छोड़ दिया क्योंकि यह प्रश्न के लिए प्रासंगिक नहीं है।

-1
0x5453 9 जुलाई 2021, 21:30

आप वास्तव में यहां कोई त्रुटि नहीं डाल रहे हैं, ऐसा करने के लिए, आपको raise का उपयोग करने की आवश्यकता है:

def speak(*languages):

    """Function takes a set of langs as input  and returns a list of languages"""
    
    if  isinstance(languages, str):
        languages = list(languages)
        
    else:
        raise TypeError('You need to pass in the right datatype')
        
    return languages
-1
Shar 9 जुलाई 2021, 21:32