pycharm 代码完成未给出建议

dxxyhpgq  于 2022-11-08  发布在  PyCharm
关注(0)|答案(7)|浏览(176)

假设我正在使用“requests”Python库。

req = requests.get("http://google.com")

在这之后,如果我输入req.,我应该得到一个我可以访问的所有方法的列表,但是由于某种原因,我没有得到,即使我手动按Ctrl+空格键。
如果我在iPython中尝试,我会得到自动完成的建议,即使我通过PyCharm中内置的Python控制台尝试,我也会得到建议。
为什么会这样?

hm2xizp9

hm2xizp91#

由于Python是一种动态类型的语言,你需要确保它能够计算出对象的类型,并正确地检查系统中的库,尽量确保代码中的对象类型是显而易见的。
从PyCharm 2.7开始(那时版本还是数字),一个好的方法是启用运行时类型检测-- PyCharm在程序运行时(调试时)挂钩到程序中,并在使用变量时检查变量的类型。
您可以通过转到设置,转到“构建,执行,部署”部分,然后转到“Python调试器”子部分,并启用“收集运行时类型信息以进行代码洞察”来启用此功能。

显然,值得注意的是,这并不是完美的--如果您进行了更改,在代码执行之前,它不会更新,并且它只能告诉您它所看到的值--您没有尝试过的其他代码路径可能会设置其他类型。
你也可以通过使用Epydoc或Sphinx样式的文档字符串来“告诉”PyCharm,这些文档字符串包含参数和返回值类型的信息。PyCharm将使用这些来改进它的检查。
从Python 3开始,Python也获得了对函数注解的支持。这些注解可以用于PEP 484的类型提示。更多信息请参见typing模块。这更正式,所以它也可以用于像mypy这样的工具,mypy是一个类型检查器,可以通过编程检查这些类型的一致性,给Python一个TypeScript风格的可选静态类型。

41zrol4v

41zrol4v2#

Python是一种动态类型语言,这意味着“get”函数不声明其返回类型。当您在IPython或PyCharm控制台中输入代码时,代码实际上正在执行,并且可以在运行的解释器中检查对象示例,并获得其方法列表。当您在PyCharm或任何其他Python IDE中输入代码时,代码并不执行。并且只能使用静态分析来推断方法的返回类型,但这并不是在所有情况下都可行。

mklgxw1f

mklgxw1f3#

如果动态填充dict,PyCharm不知道它包含了什么。所以你必须事先提示PyCharm关于dict的键。Prodict正是这样做来提示PyCharm的,所以你得到了代码完成。
首先,如果你想访问响应对象,那么你必须获得一个json响应,并将其转换为dict。这是通过requests.json()方法实现的,如下所示:

response = requests.get("https://some.restservice.com/user/1").json()

好了,我们把它加载到一个dict对象中,现在你可以用括号语法访问键了:

print(response['name'])

既然你要求自动代码完成,你当然需要提示PyCharm关于dict的键。如果你已经知道respone模式,你可以使用Prodict来提示PyCharm:

class Response(Prodict):
    name: str
    price: float

response_dict = requests.get("https://some.restservice.com/user/1").json()

response = Response.from_dict(response_dict)
print(response.name)
print(response.price)

在上面的代码中,nameprice属性都是自动完成的。
如果你不知道响应的模式,那么你仍然可以使用点标记法来访问dict属性,如下所示:

response_dict = requests.get("https://some.restservice.com/user/1").json()
response = Prodict.from_dict(response_dict)
print(response.name)

但是代码完成将不可用,因为PyCharm不能知道模式是什么。
更重要的是,Prodict类直接派生自dict,因此您也可以将其用作dict
这是说明代码完成的Prodict repo的屏幕截图:

免责声明:我是《预言》的作者

uwopmtnx

uwopmtnx4#

如果将只检测方法或变量,并且......写入其中的某个部分:文件-〉设置-〉编辑器-〉常规-〉打开窗口顶部的代码完成,取消选中[ Mach Case ]

jdgnovmf

jdgnovmf5#

这是一个老问题,但可能所有提供的答案都没有达到目标,差距就像太阳到参宿四的距离一样大(没有一个答案被接受,@user1265125是一个活跃的家伙,在这里有8年的时间,比我更有信誉)。
碰巧的是,我刚刚遇到了与OP完全相同的问题,解决方案是:

项目文件夹路径中某个位置的非ASCII字符

说真的PyCharm开发者们...

nfs0ujit

nfs0ujit6#

在我的情况下,解决方案是重置设置,其他的一切都不为我工作。“从主菜单中,选择文件|管理IDE设置|恢复默认设置。或者,按Shift键两次,然后键入恢复默认设置。”

eiee3dmh

eiee3dmh7#

我也遇到过类似的问题。只有我已经用过的函数才被建议,而且只作为纯文本,而不被识别为方法。
对我来说,解决这个问题的方法是删除项目目录中的**/.idea**文件夹。(之后,您必须再次设置运行配置)

相关问题