函数未定义 - VSCode Python

29

我正在使用启用了Microsoft for Python扩展的VSCode来编写Python代码。

但是,在Python v3.9.0中,如果我尝试查找函数定义,则会出现未找到定义的错误。

输入图像描述

然而,如果我使用Python 3.7.0的Conda虚拟环境,则不会出现这个错误。

可能是什么问题呢?


你是否正在使用最新版本的Python VSCode扩展程序? - Jorge Morgado
我正在使用 v2020.9.114305,我认为这是最新的版本。 - Mihir
https://dev59.com/dVQJ5IYBdhLWcg3wZVD_ 解释了如何通过添加 "python.autoComplete.extraPaths": ["./path-to-your-code"] 来修改 .vscode/settings.json。 - Jason Harrison
9个回答

29

我曾经遇到同样的问题,将 Python 语言服务器从 Jedi 改为 Microsoft 或 Pylance 确实解决了这个问题。要做到这一点,请使用 Cntrl + , 进入设置并搜索 python.languageserver


1
将其设置为“Microsoft”解决了我的问题。 - wicccked
经过数月的疯狂排查,你的答案终于为我解决了这个问题。我现在可以轻松查看定义并且智能感知正常工作。非常感谢! - Samwise Ganges
1
有趣的是,在我的情况下,从Pylance 切换到 Jedi 解决了这个问题。 - John Paul R
1
这个概念对我行之有效,从默认设置切换到 Pylance 后问题得以解决。(Microsoft 对我来说不是可用选项) - JGFMK
1
微软没有为我提供支持,Pylance也无法使用,但是Jedi可以解决我的问题。真奇怪。 - juan
微软对我来说也不可用。使用Jedi解决了这个问题。 - undefined

14

当我使用您提供的代码并禁用了Python扩展时,我遇到了与您相同的问题。

由于“转到定义”功能是由相应的语言服务扩展支持的,建议您检查当前是否可用Python扩展,并确认所选Python解释器也可用。另外,请尝试重新加载VSCode。


1
谢谢。我的VsCode Python解释器已更改,这解决了我的问题。 - Sean

3
安装一些可能会干扰已有pip包的conda包后,我遇到了相同的问题。
我的解决方案如下:
- 将Python解释器设置为正确的版本(在命令面板中键入“interpreter”即可找到)。 - 在您的settings.json文件中添加选项:"python.languageServer" : "Microsoft"。保存文件。 - 重新启动VS Code。
打开命令面板的方法:只需在Windows上键入ctrl-P即可。
打开settings.json文件的方法(如果您像我一样是新手):打开命令面板并搜索“settings”,然后选择“Preferences: Open Settings (JSON)”。

2
编辑settings.json时出错: 该值不被接受。有效值为:"Default"、"Jedi"、"Pylance"、"None"。 - quickdraw

1

确保您使用正确的解释器,可以让您导入为该解释器安装的第三方包。

但是,如果您正在尝试查找自己模块的定义,请确保您的 PYTHONPATH 设置正确,并且您的模块内有一个空的 __init__.py 文件。

假设您的模块定义在

[project_root]/src/my_library

您在项目根目录下的.env文件中定义的PYTHONPATH应包含以下内容:

PYTHONPATH=$PYTHONPATH:./src

(请注意,在Windows中,分隔符是“;”,而不是“:”。)另外,请确保您已创建文件[project_root]/src/my_library/__init__.py

1
在将Python升级到3.9之后,我遇到了这个问题。我发现Python:默认解释器路径仍然指向2.7。
我还将Python:语言服务器切换为Pylance。我将尝试使用语言服务器来查看它是否有影响。在此之前,我已经连续三次收到“语言服务器崩溃”的错误提示,但重新安装后,我不再收到该错误提示了。

0
  • 安装 pylance 扩展
  • 偏好设置 -> 设置,搜索 "languageserver",选择 Pylance

0

关于Python解释器的一些答案在版本1.68上已经过时,因为解释器选择是在启动Jupyter笔记本文件时明确完成的。但我遇到了同样的问题,对我有用的是以下一个或多个步骤 - 不确定哪一个修复了它。

  1. 卸载Kite(在某个帖子中看到它会干扰转到定义功能)
  2. CTRL SHIFT P - 重新加载所有禁用的扩展名
  3. CTRL SHIF P - 重新加载窗口 在最后一次重新加载时,右下角有一个选项允许启用所有扩展名重新加载 之后,转到其他.py文件中定义的函数的定义开始工作了

0

最近,我遇到了一个类似的问题。在我的情况下,这是一个关于 Go 模块的问题。

只需运行 go mod verify 就可以轻松解决。


0
你可以使用对我来说有效的pylint
运行以下命令安装 pylint:
pip install -U pylint --user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接