VSCode + Pytest:“错误:TypeError:无法读取未定义的属性” $“

时间:2019-09-11 14:00:37

标签: python python-3.x visual-studio-code pytest

我正在按照@ https://code.visualstudio.com/docs/python/testing指南执行2个非常基本的单元测试。但是,当尝试运行单元测试时,我收到错误消息:

错误:TypeError:无法读取未定义的属性“ $”

我正在使用最新版本的VSCode在 Windows 10,Python 3.7.4上

第一次尝试运行测试(使用最新版本的Pytest)时,出现错误“ 错误:TypeError:无法读取未定义的属性'$'”。这导致我:https://github.com/microsoft/vscode-python/issues/6990

然后,我尝试使用概述的pip命令将我的Pytest降级到以前的版本(5.0.1)。但是,“ pip”命令无法识别,因此我认为这是我必须在使用VSCode之前启用的功能。进一步的谷歌搜索使我了解到,在安装任何版本的Python> 3.0时,默认情况下都应包含它。然后,我认为它可能需要扩展,因此我在VSCode中添加了pip-packages扩展。重新启动并重试-尝试降级Pytest时出现相同错误。

进一步的搜索使我想到:How to use pip with Visual Studio Code,它指向在How to add to the PYTHONPATH in Windows, so it finds my modules/packages?上调整系统变量的说明。

然后我尝试调整这些变量,但它似乎只会引起进一步的问题,因此我取消了这些更改。然后,我问一个朋友,说它应该没有那么复杂,并建议我首先设置一个虚拟环境。

我走了Venv的道路,在设置了一系列问题之后,我成功了,能够将我的Venv设置为解释器,并且还可以在Venv上安装Pytest。

我现在尝试在Venv中再次执行测试,并收到与以前相同的错误。这使我回到:https://github.com/microsoft/vscode-python/issues/6990

我能够按照github线程中的建议成功地将Venv中的Pytest降级到5.0.1,然后重新启动VScode并再次执行测试。同样的错误。

我找不到任何进一步的信息-降级Pytest似乎对其他所有人都有用。

我要测试的代码是:

inc_dec.py:

def increment(x):
    return x + 1

def decrement(x):
    return x - 1

我要执行的测试用例是:

pytest_test.py:

import inc_dec    # The code to test

def test_increment():
    assert inc_dec.increment(3) == 4

def test_decrement():
    assert inc_dec.decrement(3) == 4

我希望第一个单元测试通过,第二个单元测试失败。相反,我收到错误:错误:TypeError:无法读取未定义的属性“ $”

1 个答案:

答案 0 :(得分:1)

好的-在经历了许多头痛之后,我的问题相当简单,尽管由于缺乏经验对我而言并不明显。

基本上-我有:

  • 安装了一个程序包来创建虚拟环境(pip install virtualenv)
  • 使用命令virtualenv C:/ path / to / venv / folder创建虚拟环境
  • 在VSCode设置中,我搜索了“虚拟环境”并找到了用于指定我的虚拟环境文件夹的设置
  • 在这一点上-我已经读到我需要“激活”我刚刚创建的虚拟环境。我先在这里尝试了激活说明:https://virtualenv.pypa.io/en/stable/userguide/,但是收到了一个错误消息,因此(错误地)我认为我可以通过在VSCode GUI中选择它作为解释器来激活它
  • 然后我安装了Pytest,尝试运行单元测试并失败了,所以我再次将其降级到5.0.1并再次尝试-但仍然失败。这就是我来到StackOverflow的地方
  • 我决定再试一次-删除了我的venv,确保从全局环境中卸载了Pytest,并重新添加了venv等。
  • 在这一点上-尝试运行激活命令时,我决定浏览进一步收到的错误消息,导致我发现:https://superuser.com/questions/106360/how-to-enable-execution-of-powershell-scripts
  • 结果-我没有足够的特权来运行激活脚本,因此我的venv从未被“激活”,并且我正在运行的用于安装和降级Pytest的命令已应用于全局环境,而不是静脉
  • 我使用set-executionpolicy remotesigned更新了我的权限(通过Windows Powershell作为管理员)
  • 然后我再次尝试激活脚本(成功),安装了最新版本的Pytest以查看它是否可以工作(出现相同的错误),然后降级为5.0.1,然后再次运行测试
  • 成功:)