【发布时间】:2020-10-06 17:46:38
【问题描述】:
当我在 vscode 调试器中运行 pytest 并选中“未捕获的异常”,并且有测试错误时,不会发生未捕获的异常,因为 pytest 捕获它们并进行结果报告。我如何告诉 pytest 让异常发生?以便我可以在 vscode 调试器中捕获它们?
基本上我想要--pdb 这样的行为,但我希望它启动 vscode 调试器而不是 pdb。标志--pdbcls 听起来很有希望,但不确定<module>:<class> 应该给它什么。
注意:通常我只会让它在引发异常时中断。但是我们的代码有大量引发但捕获的异常,所以这个选项没有用。
这是一段在调试 pytest 测试时触发 AssertionError 时 vscode 没有中断的视频:
@rioV8 下面的建议确实打破了异常,但由于某种原因没有堆栈,这意味着您无法从那里进行调试:
我一定是遗漏了一些东西,因为似乎没有其他人需要这种能力。但对我来说,这似乎绝对是使用测试框架和调试器可以做的最基本最简单的事情:作为开发人员,我想从引发错误的地方开始调试。
人们在使用带有 pytest 的调试器时一定有一些完全不同的方式,我忽略了一些明显的技术。
【问题讨论】:
-
它对我来说很好用,因为你给出了任何代码 sn-p 我只能猜测。如果您在测试中使用了
with pytest.raises,那么您实际上已经捕获了异常,因此调试器不会中断 -
它对你来说很好,因为 pytest 本身退出时出现异常?我怀疑除非你以某种方式安排它,因为通常 pytest 会捕获异常,以便它可以在运行结束时报告哪些测试失败。您不同意 pytest 通常会捕获所有异常以便报告测试失败吗?
-
如果我没有
with pytest.raises,它确实会崩溃 -
我们没有使用
pytest.raises,它不会中断。我正在使用TEST:PYTHON树视图中测试右侧的Debug按钮运行。它会在Python Test Log输出窗格中打印异常的名称,但不会中断。如果我在调试器中检查 Raised Exceptions 它将中断,但我不能这样做,因为有太多误报,我们引发和捕获的不相关异常。如果 vscode 允许您选择要中断的异常,那将有很大帮助。 -
我在原始问题中添加了一个视频,展示了 vscode 如何不会对我造成破坏。
标签: visual-studio-code vscode-debugger vscode-python