2010-05-21 78 views
7

我的问题可能很愚蠢,我希望有人成功解决了这个问题。Eclipse pydev自动建议在某些情况下不起作用

有时我在自动完成框(Eclipse 3.5.2,PyDev 1.5.7)中看不到正确的建议。例如:

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

msg现在是一个Message对象。而像get_payload()这样的函数可以正常工作。

msg.get_payload() 

但我没有在自动完成列表中获得get_payload()

我觉得PyDev不知道msg是什么,所以它不知道该显示什么。

也许我应该导入其他东西,不仅email模块?

在此先感谢!

+0

没有问题是愚蠢的。这只是提问者的努力。 :]。 – 2010-05-21 10:24:49

+0

你说我的努力很愚蠢吗?我应该对此感到冒犯吗? :) – kishkin 2010-05-21 10:26:47

+0

当然,我没有。 '; 3'。 – 2010-05-21 10:30:35

回答

3

很可能,目前的PyDev版本还没有到能够从函数中提取出来的点(message_from_file())来知道它返回什么样的对象以提供自动完成提示。

请参阅http://sourceforge.net/projects/pydev/forums/forum/293649/topic/3697707

编辑:我相信PyDev有兴趣支持新的Python 3函数语法PEP 3107,它将在未来解决您的一些问题。

+1

所以,我只需要'import __future__'? ;)好的,我们会等待。谢谢,泽维尔! – kishkin 2010-05-21 10:52:03

+0

关于sourceforge链接。我得到了PyDev无法从编译文件中获取规范的事情。但也有源.py文件,不仅.pyc。而且我实际上可以按Ctrl +点击从'message_from_file'到'Message'。但是第二步有一些含糊不清的地方:PyDev不知道这个'Parser'类是从哪里来的。我认为这会导致自动完成问题。 – kishkin 2010-05-21 11:01:14

+1

真正的问题来自于这样一个事实,即PyDev无法解析返回的任何函数的类型对象。这是一个非常复杂,可能代价高昂的操作。这是使用动态类型语言的缺点之一。呃,好吧。 ||我们基本上同意。 – 2010-05-21 11:04:42

4

我在这个问题上挣扎颇多,直到我遇到this link。我使用了该链接中建议的第二个解决方案,它的功能就像一个魅力。

从函数调用中获得msg后,基本上需要插入assert isinstance(msg, Message)

+0

谢谢你的解决方案。但不能使它工作。你说过要做什么 – kishkin 2012-09-13 08:02:16

+1

你可以发布你正在测试的代码吗?我见过[其他文章](http://stackoverflow.com/questions/12382193/how-to-declare-variables-type-in​​-pydev/12409893#12409893)暗示相同的解决方案,它似乎已经工作其他人也是如此。 – stacksia 2012-09-13 15:37:49

+0

这里是代码:http://pastebin.com/wfD52q0V – kishkin 2012-09-17 15:28:39

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 

但我不喜欢这种方法,因为它可能会施加一些性能/代码大小的惩罚。我不知道/没有检查过Python是否足够聪明,可以在编译期间删除这个任务。

感谢SiSoie,here's a link页面解释可能性。

相关问题