如何使VS Code调试器在Python的try catch代码块中停止?

5

看到“类似问题”的建议,似乎大多数人想要与我所需相反的东西。 我想要的是,Vs-code的调试器即使在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在调试时忽略我的try catch呢?


我刚刚想到的一个想法是更改我捕捉的异常类型...虽然在调试期间我希望它总是停止运行,而在非调试时我希望它永远不会停止并向我发送一封带有错误信息的电子邮件。

有什么想法吗?


新错误:

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

当我使用我的EmptyException答案时:

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

1
有点困惑。你的意思是即使在try catch中设置断点,它也不起作用吗?还是说你想在不设置断点的情况下停止错误?如果是前者,在我的vscode中它可以正常工作。我是指它会在try catch内部停止。但如果是后者,你可以在调试器->断点选项卡中勾选“Raised Exceptions”复选框。这将在引发异常的行处停止,即使没有断点。 - Pyae
1个回答

4
这可能是一种非常愚蠢的方法,但当我运行调试模式时,我有一个标志位设置为true:
args.debug = True

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

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

EmptyError是一个自定义异常,它没有实际作用,只是为了让VS Code在调试模式下暂停:

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

有点愚蠢,但我不知道更好的方法。


我只是在需要调试器停止即断点的那行代码前添加了System.Diagnostics.Debugger.Break();。在这个修改之前,调试器并没有停下来。但是修改之后,它能够停在每一个断点处。我使用的是Visual Studio for Mac。这是一个C# (.net core)项目。 - user1207289

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