【问题标题】:C++, ignore exception and continue code?C++,忽略异常并继续代码?
【发布时间】:2011-12-01 00:14:21
【问题描述】:

有没有办法允许在抛出异常后执行坏代码块?

目前,我的代码有一个持续运行的 while 循环。此 while 循环内的代码有时会引发向量超出范围错误。我一直无法追踪这个特殊异常的原因,但最终,这并不重要,因为 while 循环中的代码一遍又一遍地做同样的事情,下一次迭代不依赖于上一次迭代任何方式。

这个,在while循环中的代码崩溃后,我希望它从while语句的顶部重新开始。

有没有办法在 C++ 中实现这一点?在这种情况下,try/catch 似乎不起作用。

附加信息: 我很想将代码放在while循环中,使其成为自己的可执行文件,然后将while循环放入bash脚本中,但是每次迭代都需要一些数据保持静态,并且重新加载需要花费太多时间每次都需要这些数据,所以我不得不在 C++ 中执行我的无限 while 循环

【问题讨论】:

  • catch 循环范围内的异常并从那里继续。但是,您确实需要找到问题的根本原因。
  • 你能发一些代码来看看吗?如果您想要一个强大的应用,try{}catch(){} 应该是标准的
  • 异常是异常的,应该被处理。即使您无法找到问题所在。
  • 听起来你想要 On Error Resume Next 用于 C++。我不能推荐它。
  • 你能告诉我们你是如何尝试使用 try/catch 的吗?因为我认为将整个代码包装在一个 try 块中的 while 循环中(并且不要忘记在代码中记录为什么你不关心这个异常!)应该达到预期的效果。

标签: c++ exception try-catch


【解决方案1】:

你只需要在while循环中捕获异常:

while(true) 
{
    try 
    {
          // your code
    }
    catch (Exception e) { /* Please, at least do some logging or other error handling here*/ }
}   

【讨论】:

  • } catch (std::out_of_range& exc) { std::cerr << exc.what(); }
  • 缺少 catch 中的异常类型。我建议catch(...),因为他捕捉的动机不是好的设计。
  • 这甚至是有效的语法吗?当我在catch 之后尝试不带任何括号的try catch 语句时,我得到error: expected ‘(’ before ‘{’ token
【解决方案2】:

您应该做的第一件事是调试代码,因为您可以在调试器中运行代码并诊断问题所在。将问题推到地毯下不会让它消失,程序仍然会出现错误。

另一方面,如果问题出在真正异常但可行的事情上(考虑打开文件、通过网络发送数据包、任何可能失败但不是预期的事情与不应该永远发生的事情相比),try/catch 方法应该有效。

【讨论】:

    【解决方案3】:

    如果您可以发布一个 sn-p 代码,我们都可以为您提供更多帮助。 但一般来说,无论是 try{}catch{} 还是检查变量,您都应该始终进行某种错误处理,例如:

    while(true)
    {
    
    if(flag == "Error")
    {
    //error handle
    }
    
    else
    {
    //continue with code execution
    }
    
    }
    

    希望你能解决这个问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2019-10-22
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2021-03-25
      相关资源
      最近更新 更多