【问题标题】:How does one have the vscode debugger halt even inside a try catch in python?即使在 python 的 try catch 中,如何让 vscode 调试器停止?
【发布时间】:2025-12-12 16:05:02
【问题描述】:

看到被建议为“相似”的问题,似乎大多数人想要的与我想要的相反。我想要的是 Vs 代码的调试器会在错误点停止,即使在 try catch 中(通常会这样做)。

但它所做的并不是在像这样的 try catch 中停止:

import traceback 

try:
    main() # has bugs I'm trying to debug
except Exception as e:
    send_email(traceback.format_exc())
    send_email(e)

我知道这可能是一件奇怪的事情,并且 vs-code 的调试器可能运行正确(因为我的代码告诉它如何处理异常!)但是我有一些我想调试而不是捕获的错误.事实上,我的外部 try catch 就在那里,因为我正在使用一个集群,当有任何错误时会向我发送电子邮件并告诉我它们。否则我的主代码周围根本不会有 try catch。

有没有办法告诉 vs-code 在我实际调试时忽略我的尝试捕获?


我在写这篇文章时的一个想法是改变我捕获的异常类型......尽管在调试期间我希望它总是停止,而在不调试时我希望它永远不会停止并向我发送一封电子邮件-带有错误的邮件。

有什么想法吗?


新错误:

Exception has occurred: TypeError
catching classes that do not inherit from BaseException is not allowed

当使用我的EmptyException 答案时:

class EmptyError(Exception):
    def __init__(self):
        pass

【问题讨论】:

  • 有点困惑。你的意思是即使你在try catch中设置了断点,它也不起作用? (或)您想在不设置断点的情况下停止错误吗?如果是前者,它在我的 vscode 中可以正常工作。我的意思是它在 try catch 内停止。但如果是后者,您可以在 Debugger -> Breakpoints 选项卡中勾选“Raised Exceptions”复选框。即使没有断点,它也会在引发异常的行停止。

标签: python-3.x visual-studio visual-studio-code vscode-debugger


【解决方案1】:

这可能是一种非常愚蠢的方法,但是当我在调试模式下运行时,我有一个设置为 true 的标志:

args.debug = True

然后根据该标志设置异常类型:

if args.debug:
    args.ExceptionType = Exception
else:
    args.ExceptionType = EmptyError

EmptyError 是一个自定义异常,它什么都不做,只是为了让 VS 代码在我在调试模式下运行时停止:

class EmptyError(Exception):
    def __init__(self):
        pass

有点笨,但我不知道什么更好。

【讨论】:

  • 我只是在我需要调试器停止的行之前放了一个System.Diagnostics.Debugger.Break();,即断点。在此更改之前,调试器没有停止。在此之后,它在每个断点处停止。我正在使用 Visual Studio for mac。这是一个 c# (.net core) 项目
最近更新 更多