嘿StackOverflow社区,
关于抛出异常。一般什么时候抛出和异常,什么时候抓取?
假设我遇到了这样的情况,我不得不退出,因为发生了一些问题,我无法从它中恢复过来。我是投还是接?
我现在就这么做:
try {
// some code
}
catch (IOException e) {
logger.info("Failed to do something, and cannot continue" + e.getMessage(), e);
e.printStackTrace();
throw e;
}
这样做对吗?如果我只是抛出异常会更合适吗?对不起,我是例外的新手:)
当希望程序继续运行时,通常会在方法中捕获异常。如果希望调用该方法的更高级别的方法来处理异常,则引发异常。例如,您可能会将它抛回主方法,该方法有一个try.catch块(可能有不同的catch块用于不同的异常)封装所有方法调用,并且异常可以在那里处理(例如结束程序)。
请记住,抛出异常将立即结束该方法。这会影响您的代码流。如果在方法中间可能有一个异常,并且如果发生了该html" target="_blank">异常,它下面的代码就无法运行,那么您需要将整个部分包装在try/catch块中,或者抛出一个异常。
一个一般的建议--printStackTrace()是不好的。您可以自己创建更好的错误输出(您还可以在输出中包含堆栈跟踪)。更好的是,使用日志记录。
我建议阅读这篇异常简介和这篇介绍好的和坏的异常模式的文章。
"CATCH"应该严格地在"扔"之后叫吗?" 例1: 错误: 找不到方法“接收器”:没有方法缓存,也没有^在/tmp/739536251/main块中查找_方法。pl6第11行 例2: 无误
问题 你在一个 except 块中捕获了一个异常,现在想重新抛出它。 解决方案 简单的使用一个单独的 rasie 语句即可,例如: >>> def example(): ... try: ... int('N/A') ... except ValueError: ... print("Didn't work") ...
前几天,我在我们的一个项目中看到一些代码,它们使用try-catch并重新抛出捕获的异常,如下所示: 除了catch块中的异常之外,没有做任何其他操作,所以我甚至不确定它为什么会被抛出。我看不出再次抛出同一个异常并对该异常不做任何处理有什么好处。 如果重新抛出catch块中捕获的异常,C#如何处理?它是否陷入了无限抛接球循环?还是说它最终会放弃试一试?
我有这样的情况,即活动调用管理器类调用提供者。 活动->管理器(带有asyncTask的方法)->提供程序 我应该如何将捕获的异常发送回活动?
问题 你想捕获一个异常后抛出另外一个不同的异常,同时还得在异常回溯中保留两个异常的信息。 解决方案 为了链接异常,使用 raise from 语句来代替简单的 raise 语句。 它会让你同时保留两个异常的信息。例如: >>> def example(): ... try: ... int('N/A') ... except ValueError as e:
我们使用带有Log4j的springaop来登录我们的应用程序。我在应用程序中实现了@Before、@After、@posterhrowing建议。但我面临以下问题: 当任何异常在catch块中被捕获时,它不会调用@afterhrowing通知来打印错误堆栈跟踪。 我想为catch块中捕获的异常打印“错误堆栈跟踪”。意味着无论何时在try块中发生任何异常并被catch捕获,都应该调用一些建议来打印