假设我正在使用“requests”Python库。
req = requests.get("http://google.com")
在这之后,如果我输入req.,我应该得到一个我可以访问的所有方法的列表,但是由于某种原因,我没有得到,即使我手动按Ctrl+空格键。如果我在iPython中尝试,我会得到自动完成的建议,即使我通过PyCharm中内置的Python控制台尝试,我也会得到建议。为什么会这样?
req.
hm2xizp91#
由于Python是一种动态类型的语言,你需要确保它能够计算出对象的类型,并正确地检查系统中的库,尽量确保代码中的对象类型是显而易见的。从PyCharm 2.7开始(那时版本还是数字),一个好的方法是启用运行时类型检测-- PyCharm在程序运行时(调试时)挂钩到程序中,并在使用变量时检查变量的类型。您可以通过转到设置,转到“构建,执行,部署”部分,然后转到“Python调试器”子部分,并启用“收集运行时类型信息以进行代码洞察”来启用此功能。
显然,值得注意的是,这并不是完美的--如果您进行了更改,在代码执行之前,它不会更新,并且它只能告诉您它所看到的值--您没有尝试过的其他代码路径可能会设置其他类型。你也可以通过使用Epydoc或Sphinx样式的文档字符串来“告诉”PyCharm,这些文档字符串包含参数和返回值类型的信息。PyCharm将使用这些来改进它的检查。从Python 3开始,Python也获得了对函数注解的支持。这些注解可以用于PEP 484的类型提示。更多信息请参见typing模块。这更正式,所以它也可以用于像mypy这样的工具,mypy是一个类型检查器,可以通过编程检查这些类型的一致性,给Python一个TypeScript风格的可选静态类型。
typing
mypy
41zrol4v2#
Python是一种动态类型语言,这意味着“get”函数不声明其返回类型。当您在IPython或PyCharm控制台中输入代码时,代码实际上正在执行,并且可以在运行的解释器中检查对象示例,并获得其方法列表。当您在PyCharm或任何其他Python IDE中输入代码时,代码并不执行。并且只能使用静态分析来推断方法的返回类型,但这并不是在所有情况下都可行。
mklgxw1f3#
如果动态填充dict,PyCharm不知道它包含了什么。所以你必须事先提示PyCharm关于dict的键。Prodict正是这样做来提示PyCharm的,所以你得到了代码完成。首先,如果你想访问响应对象,那么你必须获得一个json响应,并将其转换为dict。这是通过requests的.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)
在上面的代码中,name和price属性都是自动完成的。如果你不知道响应的模式,那么你仍然可以使用点标记法来访问dict属性,如下所示:
name
price
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的屏幕截图:
免责声明:我是《预言》的作者
uwopmtnx4#
如果将只检测方法或变量,并且......写入其中的某个部分:文件-〉设置-〉编辑器-〉常规-〉打开窗口顶部的代码完成,取消选中[ Mach Case ]
jdgnovmf5#
这是一个老问题,但可能所有提供的答案都没有达到目标,差距就像太阳到参宿四的距离一样大(没有一个答案被接受,@user1265125是一个活跃的家伙,在这里有8年的时间,比我更有信誉)。碰巧的是,我刚刚遇到了与OP完全相同的问题,解决方案是:
项目文件夹路径中某个位置的非ASCII字符
说真的PyCharm开发者们...
nfs0ujit6#
在我的情况下,解决方案是重置设置,其他的一切都不为我工作。“从主菜单中,选择文件|管理IDE设置|恢复默认设置。或者,按Shift键两次,然后键入恢复默认设置。”
eiee3dmh7#
我也遇到过类似的问题。只有我已经用过的函数才被建议,而且只作为纯文本,而不被识别为方法。对我来说,解决这个问题的方法是删除项目目录中的**/.idea**文件夹。(之后,您必须再次设置运行配置)
7条答案
按热度按时间hm2xizp91#
由于Python是一种动态类型的语言,你需要确保它能够计算出对象的类型,并正确地检查系统中的库,尽量确保代码中的对象类型是显而易见的。
从PyCharm 2.7开始(那时版本还是数字),一个好的方法是启用运行时类型检测-- PyCharm在程序运行时(调试时)挂钩到程序中,并在使用变量时检查变量的类型。
您可以通过转到设置,转到“构建,执行,部署”部分,然后转到“Python调试器”子部分,并启用“收集运行时类型信息以进行代码洞察”来启用此功能。
显然,值得注意的是,这并不是完美的--如果您进行了更改,在代码执行之前,它不会更新,并且它只能告诉您它所看到的值--您没有尝试过的其他代码路径可能会设置其他类型。
你也可以通过使用Epydoc或Sphinx样式的文档字符串来“告诉”PyCharm,这些文档字符串包含参数和返回值类型的信息。PyCharm将使用这些来改进它的检查。
从Python 3开始,Python也获得了对函数注解的支持。这些注解可以用于PEP 484的类型提示。更多信息请参见
typing
模块。这更正式,所以它也可以用于像mypy
这样的工具,mypy
是一个类型检查器,可以通过编程检查这些类型的一致性,给Python一个TypeScript风格的可选静态类型。41zrol4v2#
Python是一种动态类型语言,这意味着“get”函数不声明其返回类型。当您在IPython或PyCharm控制台中输入代码时,代码实际上正在执行,并且可以在运行的解释器中检查对象示例,并获得其方法列表。当您在PyCharm或任何其他Python IDE中输入代码时,代码并不执行。并且只能使用静态分析来推断方法的返回类型,但这并不是在所有情况下都可行。
mklgxw1f3#
如果动态填充
dict
,PyCharm不知道它包含了什么。所以你必须事先提示PyCharm关于dict
的键。Prodict正是这样做来提示PyCharm的,所以你得到了代码完成。首先,如果你想访问响应对象,那么你必须获得一个json响应,并将其转换为
dict
。这是通过requests
的.json()
方法实现的,如下所示:好了,我们把它加载到一个
dict
对象中,现在你可以用括号语法访问键了:既然你要求自动代码完成,你当然需要提示PyCharm关于
dict
的键。如果你已经知道respone模式,你可以使用Prodict来提示PyCharm:在上面的代码中,
name
和price
属性都是自动完成的。如果你不知道响应的模式,那么你仍然可以使用点标记法来访问
dict
属性,如下所示:但是代码完成将不可用,因为PyCharm不能知道模式是什么。
更重要的是,Prodict类直接派生自
dict
,因此您也可以将其用作dict
。这是说明代码完成的Prodict repo的屏幕截图:
免责声明:我是《预言》的作者
uwopmtnx4#
如果将只检测方法或变量,并且......写入其中的某个部分:文件-〉设置-〉编辑器-〉常规-〉打开窗口顶部的代码完成,取消选中[ Mach Case ]
jdgnovmf5#
这是一个老问题,但可能所有提供的答案都没有达到目标,差距就像太阳到参宿四的距离一样大(没有一个答案被接受,@user1265125是一个活跃的家伙,在这里有8年的时间,比我更有信誉)。
碰巧的是,我刚刚遇到了与OP完全相同的问题,解决方案是:
项目文件夹路径中某个位置的非ASCII字符
说真的PyCharm开发者们...
nfs0ujit6#
在我的情况下,解决方案是重置设置,其他的一切都不为我工作。“从主菜单中,选择文件|管理IDE设置|恢复默认设置。或者,按Shift键两次,然后键入恢复默认设置。”
eiee3dmh7#
我也遇到过类似的问题。只有我已经用过的函数才被建议,而且只作为纯文本,而不被识别为方法。
对我来说,解决这个问题的方法是删除项目目录中的**/.idea**文件夹。(之后,您必须再次设置运行配置)