2010-05-21 15 views
7

मेरा प्रश्न शायद बेवकूफ है और मुझे उम्मीद है कि कोई इस मुद्दे को हल करने में सफल रहा है।ग्रहण pydev ऑटो-सुझाव कुछ मामलों में काम नहीं करते

कभी-कभी मैं ऑटो-समापन बॉक्स (ग्रहण 3.5.2, पायडेव 1.5.7) में सही सुझाव नहीं देख सकता। उदाहरण के लिए:

import email 
fp = open('my.eml', 'rb') 
msg = email.message_from_file(fp) 

msg अब एक संदेश वस्तु है। और get_payload() जैसे फ़ंक्शन ठीक काम करते हैं।

msg.get_payload() 

लेकिन मैं स्वत: पूर्ण करने की सूची में get_payload() नहीं मिलता है।

मुझे लगता है कि पीईडीवी को पता नहीं है कि msg क्या है, इसलिए यह नहीं पता कि क्या दिखाना है।

शायद मुझे कुछ और आयात करना चाहिए, न केवल email मॉड्यूल?

अग्रिम धन्यवाद!

+0

कोई प्रश्न बेवकूफ नहीं है। यह केवल प्रश्नकर्ता का प्रयास है। :]। –

+0

क्या आप कहते हैं कि मेरा प्रयास बेवकूफ है? क्या मुझे इससे नाराज होना चाहिए? :) – kishkin

+0

बेशक मैंने नहीं किया। '; 3'। –

उत्तर

3

संभावना है कि वर्तमान PyDev बिल्ड एक कार्य (message_from_file() आपके मामले में निकालने में सक्षम होने के लिए एक बिंदु पर नहीं गया है) यह जानने के लिए कि ऑटो-समापन संकेत प्रदान करने के लिए यह किस प्रकार की वस्तु लौटाता है।

http://sourceforge.net/projects/pydev/forums/forum/293649/topic/3697707 देखें।

संपादित करें: मेरा मानना ​​है कि वहाँ PyDev में रुचि नया अजगर 3 समारोह वाक्य रचना, PEP 3107 है, जो अपनी समस्याओं में से कुछ का समाधान होगा ... भविष्य में समर्थन करने के लिए है।

+1

तो, मुझे बस '__future__' आयात करने की आवश्यकता है? ;) ठीक है, हम इंतजार करेंगे। धन्यवाद, जेवियर! Sourceforge लिंक के बारे में – kishkin

+0

। मुझे यह बात मिलती है कि पीईडीवी संकलित फाइलों से विनिर्देश प्राप्त नहीं कर सकता है। लेकिन स्रोत .py फ़ाइलें भी हैं, न केवल .pyc। और मैं वास्तव में Ctrl + 'message_from_file' से 'संदेश' पर क्लिक कर सकता हूं। लेकिन दूसरे चरण में अस्पष्टता है: पायदेव नहीं जानता कि यह 'पारसर' वर्ग कहां से आया था। मुझे लगता है कि इस मुद्दे को स्वतः पूर्ण करने के साथ। – kishkin

+1

असली मुद्दा इस तथ्य से है कि, पीडीडीव यह हल नहीं कर सकता कि किस प्रकार की ऑब्जेक्ट्स यह लौट रही है। यह एक बहुत ही जटिल, संभवतः महंगा, ऑपरेशन है। यह गतिशील रूप से टाइप की गई भाषा का उपयोग करने के डाउनसाइड्स में से एक है। ठीक है। || और हम मूल रूप से सहमत हैं। –

4

जब तक मैं this link पर नहीं आया, तब तक मैंने इस प्रश्न से काफी संघर्ष किया। मैंने उस लिंक में सुझाए गए दूसरे समाधान का उपयोग किया, और यह एक आकर्षण की तरह काम करता है।

फ़ंक्शन कॉल से msg प्राप्त करने के बाद मूल रूप से आपको assert isinstance(msg, Message) डालने की आवश्यकता है।

+0

समाधान के लिए धन्यवाद। लेकिन यह काम नहीं कर सका। क्या आपने सब कुछ करने के लिए कहा था। – kishkin

+1

क्या आप जिस कोड का परीक्षण कर रहे हैं उसे पोस्ट कर सकते हैं? मैंने [अन्य पोस्ट] देखा है (http://stackoverflow.com/questions/12382193/how-to-declare-variables-type-in-pydev/12409893#12409893) एक ही समाधान का सुझाव देते हुए, और ऐसा लगता है कि ऐसा लगता है अन्य भी। – stacksia

+0

यहां कोड है: http://pastebin.com/wfD52q0V – kishkin

1

मुझे डॉटस्ट्रिंग कार्यों में @type पता है। में के रूप में:

from collections import deque 

def foo(a): 
''' code completion sample 
@type a: deque 
''' 
return a.popleft() # Code completion will work here 

मैं कोड के भीतर इनलाइन यह करने के लिए एक रास्ता खोजने के लिए सक्षम के रूप में (कहीं उल्लेख तरीके जहां आप बस चर एक प्रकार का एक उदाहरण आवंटित करने के लिए नाटक को छोड़कर) नहीं किया गया है:

from collections import deque 

def foo(a): 
''' code completion sample ''' 
if false: a = deque() 
return a.popleft() # Code completion will also work here 

लेकिन मुझे इस विधि का शौक नहीं है क्योंकि यह शायद कुछ प्रदर्शन/कोड आकार जुर्माना लगाता है। संकलन समय के दौरान इस असाइनमेंट को हटाने के लिए पाइथन पर्याप्त स्मार्ट है, तो मुझे नहीं पता/जांच नहीं है।

SiSoie, here's a link को संभावनाओं को समझाते हुए पृष्ठ पर धन्यवाद।

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