15

假设我正在使用“请求”python 库。

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

在此之后,如果我输入req.,我应该得到一个我可以访问的所有方法的列表。但由于某种原因我没有,即使我手动按 ctrl-space。

如果我在 ipython 中尝试这个,我会得到自动完成的建议。即使我通过 pycharm 中的内置 python 控制台尝试它,我也会得到建议。

为什么会这样?

4

7 回答 7

23

由于 Python 是一种动态类型语言,因此您需要确保它可以确定事物的类型,并正确检查系统上的库。尝试确保在您的代码中对象的类型很明显。

从 PyCharm 2.7 开始(当版本是数字时)的一种好方法是启用运行时类型检测 - PyCharm 在程序运行时(在调试时)挂钩到您的程序,并在使用变量时检查它们的类型。

您可以通过转到设置、转到“构建、执行、部署”部分,然后转到“Python 调试器”子部分并启用“收集运行时类型信息以获取代码洞察力”来启用此功能。

PyCharm 的设置屏幕打开以显示相关设置。

显然值得注意的是,这并不完美 - 如果您进行更改,在执行代码之前不会更新它,它只能告诉您它已经看到的值 - 您没有尝试过的其他代码路径可以设置其他类型。

您还可以使用包含有关参数和返回值类型的信息的 Epydoc 或 Sphinx 样式的文档字符串来“告诉”PyCharm。PyCharm 将使用这些来改进它的检查。

从 Python 3 开始,Python 还获得了对函数注释的支持。根据PEP 484,这些可用于类型提示。有关更多信息,请参阅typing模块。这更正式,因此它也可以用于诸如mypy类型检查器之类的工具,该工具可以以编程方式检查这些类型的一致性,从而为 Python 提供 TypeScript 样式的可选静态类型。

于 2013-02-22T11:16:56.597 回答
8

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

于 2013-02-22T11:18:08.897 回答
1

dict如果您动态填充它,PyCharm 不知道它包含什么。所以你必须dict事先提示 PyCharm 的键。Prodict正是这样做来提示 PyCharm,因此您可以完成代码。

首先,如果您希望能够访问响应对象,那么您必须获取一个 json 响应并将其转换为dict. 这是通过以下.json()方法实现的requests

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

好的,我们将它加载到一个dict对象中,现在您可以使用括号语法访问键:

print(response['name'])

由于您要求自动完成代码,因此您当然需要向 PyCharm 提示dict. 如果您已经知道响应模式,则可以使用 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 存储库的屏幕截图,说明了代码完成:

产品代码完成

免责声明:我是 Prodict 的作者。

于 2018-09-14T18:14:09.727 回答
0

这是一个老问题,但可能所有提供的答案都与 Sun 到参宿四的距离一样大(没有一个答案被接受,@user1265125 是一个在这里工作了 8 年并且比我更有信誉的人)。

碰巧的是,我刚刚遇到了与 OP 完全相同的问题,解决方案是:

项目文件夹路径中某处的非 ASCII 字符

说真的,PyCharm 开发人员...[doubleFacepalm]

于 2020-03-26T19:34:44.647 回答
0

就我而言,解决方案是重置设置,其他一切都不适合我。“从主菜单中,选择文件 | 管理 IDE 设置 | 恢复默认设置。或者,按两次 Shift 并键入恢复默认设置。”

于 2021-08-30T11:28:57.567 回答
0

如果只会检测方法或变量,并且...写下它的一部分:文件->设置->编辑器->常规->代码完成在打开的窗口顶部,取消选中[马赫案例]

于 2019-09-18T04:49:34.150 回答
0

我有一个类似的问题。仅建议了我已经使用过的函数,并且仅作为纯文本而不被识别为方法。

对我来说解决这个问题的是删除项目目录中的/.idea文件夹。(之后您将不得不再次设置您的运行配置)

于 2021-11-26T11:22:54.163 回答