2015-04-28 8 views
12

निम्न कोड में:इंटेलिजे-आईडीईए के पायथन प्रकार चेकर - गलत अपेक्षित प्रकार?

from typing import List 
def test() -> List[str]: 
    ret = ["Hi", "Hi"] 
    return ret 

मैं समारोह परिभाषा लाइन पर निम्न चेतावनी प्राप्त कर रहा हूँ:

Expected type 'Integral", got 'str' instead 

मैं किसी भी कारण से नहीं देख सकते हैं क्यों इंटेलीजे-विचार है अजगर मॉड्यूल इस व्याख्या str के बजाय इंटीग्रल की एक सूची लौटने के रूप में सरल कार्य। क्या यह एक प्रकार का चेकर बग है?

+0

मुझे लगता है कि त्रुटि फ़ंक्शन की वापसी के बजाय 'सूची [str]' से है - क्या * है * टाइपिंग। सूची '? – jonrsharpe

+0

यह mypy का हिस्सा है, जो पाइथन पर प्रकार की जांच की अनुमति देता है; हालांकि, यदि आप पाइथन की मानक सूची (लोअरकेस) का उपयोग करते हैं, जैसे कि डिफ टेस्ट() -> सूची [str] में आपको स्ट्र के साथ सटीक त्रुटि मिलती है। – Shookit

+3

जब आप "त्रुटि" कहते हैं, तो क्या आपका मतलब पाइथन त्रुटि है, या PyCharm से चेतावनी है? संभावित रूप से उत्तरार्द्ध, 'सूची [str]' के रूप में बस बिल्कुल काम नहीं करेगा। ध्यान दें कि उदा। * "पीईपी 484 के लिए पीईएचर्म 4.5 ईएपी बिल्ड ** प्रारंभिक समर्थन ** है, क्योंकि इस पीईपी को अभी तक अंतिम रूप दिया नहीं गया है" * (https://www.jetbrains.com/pycharm/help/type-hinting-in-pycharm। एचटीएमएल), तो आपको आश्चर्यचकित नहीं होना चाहिए अगर यह अभी तक पूरी तरह से काम नहीं कर रहा है। – jonrsharpe

उत्तर

0

पिचर्म के पास केवल संकेत संकेतों के लिए कुछ प्रारंभिक समर्थन है।

0

ध्यान दें कि typing.List एक साधारण रैपर वर्ग है जो बिल्टिन list कक्षा बढ़ाता है। यह संकेत देने में मदद करता है और new सूची के निर्माण की अनुमति नहीं देता है।

class List(list, MutableSequence[T], extra=list): 

    __slots__ =() 

    def __new__(cls, *args, **kwds): 
     if _geqv(cls, List): 
      raise TypeError("Type List cannot be instantiated; " 
          "use list() instead") 
     return _generic_new(list, cls, *args, **kwds) 

typing.List[str] कर रही है, आप एक वस्तु typing.List (जो एक प्रकार है) पर विधि __getitem__ कॉल करने के लिए कोशिश कर रहे हैं द्वारा:

यहाँ typing.List के लिए मौजूदा कोड है। यह भी ध्यान रखें कि

यह निम्न करने के लिए अनुवाद:

typing.List.__getitem__(str) 
# or 
list.__getitem__(str) 

अब अगर आप देखते हैं, क्या सूची अनुक्रमण विधि उम्मीद करता है, यह a[0], a[1] की तरह एक पूर्णांक की उम्मीद है। एक int0, 1 तरह के बजाय इस मामले में, यह एक प्रकारstr

आशा प्राप्त यह आपके typing.List की अधिक समग्र दृष्टि देता है।

संबंधित मुद्दे