exception - 调试时如何忽略当前函数中未捕获的异常?

标签 exception debugging ironpython

这是我在运行一些代码时遇到的一个奇怪的情况。我正在玩我在学校做过的旧 Python 作业 - 将它们嵌入到 C# 程序中,使用 IronPython 运行它们,等等。

嵌入代码的效果正如我所期望的那样,在 IronPython 交互中运行时也是如此。然后我在一个新的 IronPython 项目中运行它,发现了一些尴尬的行为。在没有调试的情况下运行代码给出了正常的行为。运行调试开始发出未处理的异常错误(在查看之后发现这只是警告,稍后会详细介绍)。

这对我来说是一个令人头疼的事情。单步调试代码,我发现一切都按照我的预期发生。然而,在某些时候,它会停止并显示未处理的异常窗口,指向代码中看似随机的部分。为了找出问题所在,我想出了以下代码:

from __future__ import print_function

def raiser():
    print('raising an exception')
    raise Exception() # unreported exception here

if __name__ == '__main__':
    try:
        raiser()
    except Exception: # but is handled here
        print('caught it')
    #raiser() # ignoring exceptions would leave this unreported

现在这里发生的事情应该非常明显了。不调试运行即可正常运行。通过调试运行它,它停止,表明存在未处理的异常。它被处理,只是不在raiser()函数的范围内。就在那时我意识到这是一个警告...为了这么简单的事情而疯狂地追逐了两个小时。

  • 能否以某种方式禁用或抑制此警告?

现在,我可能会期望这种警告对于需要获得所有帮助的初学者来说,但我在这方面远非初学者,并且不关心当前函数范围内未处理异常,只是它在我的代码中的某个地方进行了处理。我找不到任何对此的在线引用或 Visual Studio 中的任何设置。

  • 是否有一些新的要求必须声明将为调试器引发异常?
    (类似于Java的检查异常)
  • 这会成为错误报告的候选者吗?

这是在 IronPython 2.7 Stable(我几个小时前刚安装的)上运行的 Visual Studio 2010 Pro。我不记得这在以前的版本中是否曾出现过问题,当时我从未通过调试器尝试过代码。

最佳答案

这看起来像是 .NET 调试器与 IronPython 异常引发方式之间的奇怪交互。解决方法是进入“调试 -> 异常...”窗口,单击“添加...”,然后添加 IronPython.Runtime.Exceptions.PythonException 作为 CLR 异常。然后,清除“用户未处理”复选框,这将告诉调试器忽略未捕获的 Python 异常。

您也可以尝试在 Python Tools for Visual Studio 下运行相反,看看它是否有不同的行为。否则,请提交一个错误,以便我们至少知道它。

关于exception - 调试时如何忽略当前函数中未捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594375/

相关文章:

java - 如何有效地使用 InterruptedException

android - 避免 NetworkOnMainThreadException

ruby-on-rails-3 - Ruby 调试器在 Windows 上崩溃

R:创建自定义错误消息,为包中的函数提供参数值

c# - 为什么我会收到此 .NET 错误 - "TypeError: expected List[DataPoint], got List[DataPoint]"

Python socket.close() 在脚本退出之前不起作用

c# - 嵌入式和安装的 IronPython - dll 版本困惑

powershell - 为什么错误会通过 Powershell 中的 TRY/CATCH 循环

java - 如何记录错误级别为ERROR的消息

c# - Visual Studio 2010 调试器如何处理 XmlReader.Read 中的 XmlException?