Eclipse pydev自动建议在某些情况下不起作用

时间:2010-05-21 10:22:47

标签: python eclipse autocomplete 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模块?

提前致谢!

3 个答案:

答案 0 :(得分:4)

在我遇到this link之前,我一直在努力解决这个问题。我使用了该链接中建议的第二个解决方案,它就像一个魅力。

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

答案 1 :(得分:3)

有可能,当前的PyDev构建还没有达到能够从函数中提取(在你的情况下为message_from_file())以了解它返回什么类型的对象以便提供自动完成的程度提示。

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

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

答案 2 :(得分:1)

我知道docstring中的@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是否足够聪明,可以在编译期间删除此赋值。

感谢SiSoiehere's a link来解释可能性。