【问题标题】:Eclipse pydev auto-suggestions don't work in some casesEclipse pydev 自动建议在某些情况下不起作用
【发布时间】:2023-04-03 01:09:02
【问题描述】:

我的问题可能很愚蠢,我希望有人成功解决了这个问题。

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

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

msg 现在是一个消息对象。 get_payload() 之类的函数也可以正常工作。

msg.get_payload()

但我没有在自动完成列表中看到get_payload()

我认为 PyDev 不知道 msg 是什么,所以它不知道要显示什么。

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

提前致谢!

【问题讨论】:

  • 没有问题是愚蠢的。这只是提问者的努力。 :]。
  • 你说我的努力是愚蠢的吗?我应该为此感到生气吗? :)
  • 好的。 ;) 所以,你知道我在这个问题中在说什么,对吧?您如何处理这种不便?
  • 我一般查API。随着 Python 3.x 更加成熟,这种行为将在以后得到改善,但我目前正在尝试找到一个链接......
  • 同样的事情。我只是使用正确的功能,暂时忘记了自动完成。

标签: python eclipse autocomplete pydev


【解决方案1】:

我也为这个问题苦苦挣扎,直到遇到this link。我使用了该链接中建议的第二种解决方案,它就像一个魅力。

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

【讨论】:

  • 感谢您的解决方案。但无法使其工作。你说的都做了。
  • 你能发布你正在测试的代码吗?我看到other posts 提出了相同的解决方案,而且它似乎也适用于其他人。
【解决方案2】:

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

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

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

【讨论】:

  • 所以,我只需要import __future__? ;) 好的,我们等着。谢谢你,泽维尔!
  • 关于 sourceforge 链接。我知道 PyDev 无法从编译文件中获取规范。但也有源 .py 文件,而不仅仅是 .pyc。我实际上可以 Ctrl+单击从message_from_fileMessage。但是第二步有歧义:PyDev 不知道这个Parser 类是从哪里来的。我认为这会导致自动完成问题。
  • 真正的问题在于,PyDev 无法解析它返回的任何函数的对象类型。这是一个非常复杂,可能成本高昂的操作。这是使用动态类型语言的缺点之一。呃,好吧。 ||我们基本上同意。
【解决方案3】:

我知道 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 到页面解释可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多