Jedi-Python自动完成(提示)不显示方法或建议
我目前正在编写升华文本3 使用Jedi-Python自动完成,具体来说,它可以处理最基本的事情。 但是,我在本例中使用了BeautifulSoup4 主要的问题是,在一个文件上执行多个点()方法时,没有正确显示补全,补全器必须依赖于首先查看它。查找所有方法,然后它将建议它(不过这似乎是来自Sublime Text 3本身的自动补全) 下一种情况会发生什么Jedi-Python自动完成(提示)不显示方法或建议,python,sublimetext3,sublime-text-plugin,jedi,Python,Sublimetext3,Sublime Text Plugin,Jedi,我目前正在编写升华文本3 使用Jedi-Python自动完成,具体来说,它可以处理最基本的事情。 但是,我在本例中使用了BeautifulSoup4 主要的问题是,在一个文件上执行多个点()方法时,没有正确显示补全,补全器必须依赖于首先查看它。查找所有方法,然后它将建议它(不过这似乎是来自Sublime Text 3本身的自动补全) 下一种情况会发生什么 import requests from bs4 import BeautifulSoup as Soup // works ok, show
import requests
from bs4 import BeautifulSoup as Soup // works ok, shows all suggestions
request = requests.get('http://example.com')
soup = Soup(request.text, 'lxml')
main = soup.find('body') // shows find method
//However, No available completions in the next case
second_lookup = main.find('div') // doesn't show any autocompletions/hints when starting w/ .fi..
在寻找任何其他“更深入”的自动完成方法时也是如此。到目前为止,我已经尝试调整绝地..设置文件中的所有设置。这没用,我试过使用巨蟒,因为它还有一些额外的工具,包括绝地
这似乎是特定于一些库,例如numpy和bs4
注:
此并非特定于升华文本3。
同样的事情也适用于原子和类似的IDE。Python是一种动态语言。函数或方法的参数完全依赖于指定的类型。返回类型也是如此 例如,这是
requests
模块的get
函数的docstring
(或文档):
def get(url, params=None, **kwargs):
r"""Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)
编辑器可以查找find
类的Soup
方法。但是,他们不知道这个方法返回什么类型的对象
解决方法是在分配给变量时:
import requests
from bs4 import Tag
from bs4 import BeautifulSoup as Soup
request = requests.get('http://example.com')
soup = Soup(request.text, 'lxml')
main: Tag = soup.find('body')
# Auto completion works.
second_lookup = main.find('div')
或者您可以将:rtype:Tag
添加到find
docstring。我知道它返回Tag
对象,因为type(main)
或type(second\u lookup)
都返回
我提供的链接足以让您了解python中的静态类型,并完美地记录您的代码。希望这有帮助 在
main
之后键入
后是否显示任何内容?不,它不显示任何补全。它应该显示类方法(来自bs4)我以后会进一步检查这一点谢谢,希望有人(像你一样)能进一步澄清这个问题,至少了解这里的问题是什么。像pinpoint一样,绝地核心阿哈姆也犯了错误。问题基本上是bs4.element.Tag.\u find_all
(这就是Soup.find
)中的代码很难推断,绝地根本不懂。当我阅读代码时,我甚至不太确定返回类型是什么。那么绝地武士怎么理解。。。无论如何:解决方案是给find方法一个注释,以显示它返回的类型。目前还不清楚返回的是什么。谢谢,这是一个非常有用的见解。希望我们能够解决这个解决方案以外的问题,因为它不那么方便,也不适合典型用户。因此,我想研究一种更方便群众的解决方案。我非常感谢你花时间写这篇文章,如果没有其他答案,我会接受它作为解决方案。没问题。我同意你的看法,答案是变通的。但这就是动态语言的问题,例如javascript(如果是库或框架,也可以是一些)。因为一切都是动态的。然而,打字脚本现在真的很流行。这些类型注释对intellisense有很大的帮助。我们可以把这个:标记放在beautifulsoup库中,这样它就可以从那个里开始工作了吗?然后在建议提交并与他们合并之后?你可以。但他们是在午餐桌上招待的。你可以在那里报告一个bug吗?
import requests
from bs4 import Tag
from bs4 import BeautifulSoup as Soup
request = requests.get('http://example.com')
soup = Soup(request.text, 'lxml')
main: Tag = soup.find('body')
# Auto completion works.
second_lookup = main.find('div')