Eclipse Pydev Auto-предложения не работают в некоторых случаях - PullRequest
7 голосов
/ 21 мая 2010

Мой вопрос, вероятно, глупый, и я надеюсь, что кому-то удалось решить эту проблему.

Иногда я не вижу правильных предложений в окне автозаполнения (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 модуль?

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 12 сентября 2012

Я тоже немного боролся с этим вопросом, пока не наткнулся на эту ссылку . Я использовал второе решение, предложенное в этой ссылке, и оно работает как шарм.

Обычно вам нужно вставить assert isinstance(msg, Message) после того, как вы получите msg от вызова функции.

3 голосов
/ 21 мая 2010

Скорее всего, текущая сборка PyDev еще не дошла до точки, чтобы иметь возможность извлечь из функции (message_from_file() в вашем случае), чтобы узнать, какой тип объекта он возвращает для предоставления подсказки для автозаполнения.

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

Редактировать: Я полагаю, что PyDev заинтересован в поддержке нового синтаксиса функции Python 3, PEP 3107, который решит некоторые ваши проблемы ... в будущем .

1 голос
/ 15 октября 2013

Я знаю @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 , вот ссылка на страницу, объясняющую возможности.

...