我们最近遇到了一个Java服务器应用程序的问题,其中应用程序抛出了未捕获的错误,因为Error是Throwable的一个单独的子类,我们只捕获异常.
我们通过捕获Throwables而不是Exceptions解决了当前的问题,但是这让我想到为什么你想要捕获Exceptions而不是Throwables,因为你会错过错误.
所以,当你能捕获Throwables时,你为什么要捕捉异常呢?
有没有办法在Python中创建双进度条?我想在彼此内部运行两个循环.对于每个循环,我想要一个进度条.我的程序看起来像:
import time
for i1 in range(5):
for i2 in range(300):
# do something, e.g. sleep
time.sleep(0.01)
# update upper progress bar
# update lower progress bar
Run Code Online (Sandbox Code Playgroud)
中间某处的输出应该看起来像
50%|############################ |ETA: 0:00:02
80%|################################################## |ETA: 0:00:04
Run Code Online (Sandbox Code Playgroud)
已经存在的非常酷的进度条模块似乎不支持这一点.
我一直听到这个
catch (Exception ex)
Run Code Online (Sandbox Code Playgroud)
然而,不好的做法是,我经常在事件处理程序中使用它,例如,操作可能会进入网络,从而可能出现许多不同类型的故障.在这种情况下,我捕获所有异常并在消息框中向用户显示错误消息.
这被认为是不好的做法吗?除了异常之外我无能为力:我不希望它停止应用程序,用户需要知道发生了什么,而且我处于代码的顶层.我还应该做什么?
编辑:
人们说我应该查看调用堆栈并专门处理错误,因为例如StackOverflow异常无法有意义地处理.然而,停止这个过程是最糟糕的结果,我想不惜一切代价阻止这一过程.如果我无法处理StackOverflow,那么就是这样 - 结果将不会比没有捕获异常更糟糕,并且在99%的情况下,就我而言,通知用户是最不好的选择.
此外,尽管我尽最大努力解决可能引发的所有可能异常,但在大型代码库中,我可能会错过一些.对于他们中的大多数人来说,最好的防御仍然是告知用户.
我对这两个主题非常不确定.我知道我应该使用multi-catch来处理需要以相同方式处理的异常.但出于什么目的,我真的需要这样的东西.
private void something(String name) throws IOException, RemoteException {
try {
...
} catch (Exception ex) {
... // do something
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud) 这可能是一个基本问题,但我找不到答案.如果你想在Android中只捕获FileNotFound,那么你就写了
} catch (FileNotFoundException e) {
Run Code Online (Sandbox Code Playgroud)
但是如果你想要准确地捕获ENOSPC(设备上没有空间)错误,你会怎么写?我不能使用"catch(Exception e)"因为我想明确处理这一个错误.
这是对此问题的后续问题.
人们普遍认为,做一个广泛的'捕获(例外)'是一个坏主意.
推理通常类似于"你必须正确处理异常"和"抓住你能处理的东西"和其他一些通用的声音参数.
那些通用的答案听起来很合理,但它们并不能让我满意.
让我具体一点.这是典型的代码,它应该是"坏的".
try {
... do something...
} catch (Exception e) {
log(e); //leave a trace for debugging
return ...a value the context can deal with...
}
Run Code Online (Sandbox Code Playgroud)
一个怀疑的头脑仍然不相信不处理异常(这可能会炸毁整个程序),必然比以这种通用方式处理它更好.
所以我真的想要一些特定的,令人信服的例子,带有代码片段,实际上发生了一些不好的事情,因为一个像上面那样过于宽泛的catch子句.
PS:人们可以用Java以外的其他语言来思考这个问题,但是由于我想要特定的例子,这实际上是关于Java程序和JRE可能引发的特定异常.
PS2:我特别感兴趣的是Exception的例子,它实际上是java.lang.Exception的子类型,而不是更广泛的'Throwable'.因此,排除像'OutOfMemoryError'这样的东西作为有效的例子.