Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jedi-Python自动完成(提示)不显示方法或建议_Python_Sublimetext3_Sublime Text Plugin_Jedi - Fatal编程技术网

Jedi-Python自动完成(提示)不显示方法或建议

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

我目前正在编写升华文本3 使用Jedi-Python自动完成,具体来说,它可以处理最基本的事情。 但是,我在本例中使用了BeautifulSoup4

主要的问题是,在一个文件上执行多个点()方法时,没有正确显示补全,补全器必须依赖于首先查看它。查找所有方法,然后它将建议它(不过这似乎是来自Sublime Text 3本身的自动补全)

下一种情况会发生什么

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..
在寻找任何其他“更深入”的自动完成方法时也是如此。到目前为止,我已经尝试调整绝地..设置文件中的所有设置。这没用,我试过使用巨蟒,因为它还有一些额外的工具,包括绝地

这似乎是特定于一些库,例如numpybs4

注: 此并非特定于升华文本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')