标签: try-catch

从try catch finally块中返回是不好的做法吗?

所以今天早上我遇到了一些看起来像这样的代码:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}
Run Code Online (Sandbox Code Playgroud)

现在这段代码编译得很好并且可以正常工作,但是从try块中返回它感觉不对,特别是如果最终有关联的话.

我的主要问题是如果最终抛出它自己的例外会发生什么?你有一个返回的变量,但也有一个例外来处理...所以我有兴趣知道其他人在try块中返回的想法?

c# try-catch try-catch-finally

126
推荐指数
5
解决办法
7万
查看次数

如果首先可以避免异常,最好"尝试"某些东西并捕获异常或测试?

我应该测试if某些东西是有效的还是只是try为了捕获异常?

  • 有没有可靠的文件说一种方式是首选的?
  • 一种方式更pythonic

例如,我应该:

if len(my_list) >= 4:
    x = my_list[3]
else:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

要么:

try:
    x = my_list[3]
except IndexError:
    x = 'NO_ABC'
Run Code Online (Sandbox Code Playgroud)

一些想法......
PEP 20说:

错误不应该默默地传递.
除非明确沉默.

应该使用a try而不是if被解释为默认传递的错误?如果是这样,你是否通过这种方式使用它来明确地对它进行静音,从而使它成为可能?


不是指的情况下,你只能做的事情1路; 例如:

try:
    import foo
except ImportError:
    import baz
Run Code Online (Sandbox Code Playgroud)

python if-statement exception-handling try-catch pep

125
推荐指数
5
解决办法
4万
查看次数

Java Try Catch Finally块没有Catch

我正在审查一些新代码.该程序只有一个try和一个finally块.由于catch块被排除在外,如果遇到异常或任何可抛出的东西,try块如何工作?它只是直接进入finally块吗?

java finally try-catch try-catch-finally try-finally

118
推荐指数
5
解决办法
13万
查看次数

如何捕获整数(0)?

假设我们有一个产生的陈述integer(0),例如

 a <- which(1:3 == 5)
Run Code Online (Sandbox Code Playgroud)

抓住这个最安全的方法是什么?

error-handling integer r try-catch

118
推荐指数
5
解决办法
10万
查看次数

如何捕获fs.readFileSync()没有文件?

在node.js中,readFile()显示了如何捕获错误,但是没有关于错误处理的readFileSync()函数的注释.因此,如果我在没有文件时尝试使用readFileSync(),我会收到错误Error: ENOENT, no such file or directory.

如何捕获抛出的异常?doco没有说明抛出了什么异常,所以我不知道我需要捕获哪些异常.我应该注意到,我不喜欢通用的'捕获每一个可能的异常'样式的try/catch语句.在这种情况下,我希望捕获文件不存在时发生的特定异常,并尝试执行readFileSync.

请注意,我在启动连接尝试之前只在启动时执行同步功能,因此不需要我不应该使用同步功能的注释:-)

error-handling try-catch node.js

118
推荐指数
4
解决办法
8万
查看次数

避免嵌套try catch块的模式?

考虑一种情况,我有三种(或更多)方法执行计算,每种方法都可能因异常而失败.为了尝试每次计算,直到我们找到一个成功,我一直在做以下事情:

double val;

try { val = calc1(); }
catch (Calc1Exception e1)
{ 
    try { val = calc2(); }
    catch (Calc2Exception e2)
    {
        try { val = calc3(); }
        catch (Calc3Exception e3)
        {
            throw new NoCalcsWorkedException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何可接受的模式以更好的方式实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种方法可以更普遍地执行此操作(即,无需为我想要使用的每个方法编写辅助方法)?我已经考虑过使用泛型编写一个静态方法,它在try/catch中包装任何给定的方法,并在失败时返回null,但我不确定如何解决这个问题.有任何想法吗?

c# monads design-patterns try-catch

112
推荐指数
7
解决办法
2万
查看次数

C#捕获堆栈溢出异常

我得到一个递归调用一个抛出堆栈溢出异常的方法.第一个调用被try catch块包围,但没有捕获异常.

堆栈溢出异常是否以特殊方式运行?我可以正确捕获/处理异常吗?

注意:如果相关:

  • 主线程中没有抛出异常

  • 代码抛出异常的对象由Assembly.LoadFrom(...)手动加载.CreateInstance(...)

c# stack-overflow try-catch

110
推荐指数
8
解决办法
9万
查看次数

在c ++中,异常如何工作(幕后)

我一直看到有人说异常很慢,但我从来没有看到任何证据.因此,我不会询问它们是否存在,而是会询问异常是如何在场景背后起作用的,因此我可以决定何时使用它们以及它们是否很慢.

据我所知,异常与做一堆返回是一回事,但它也会检查何时需要停止返回.它如何检查何时停止?我正在猜测并说有一个第二个堆栈,其中包含异常类型和堆栈位置然后返回直到它到达那里.我也猜测堆栈触摸的唯一时间是抛出和每次尝试/捕获.使用返回代码实现类似行为的AFAICT将花费相同的时间.但这都是猜测,所以我想知道.

例外如何真正起作用?

c++ performance exception try-catch throw

108
推荐指数
5
解决办法
3万
查看次数

在Java中是否可以在同一个catch块中捕获两个异常?

我需要捕获两个异常,因为它们需要相同的处理逻辑.我想做的事情如下:

catch (Exception e, ExtendsRuntimeException re) {
    // common logic to handle both exceptions
}
Run Code Online (Sandbox Code Playgroud)

是否可以避免重复每个catch块中的处理程序代码?

java exception-handling try-catch

108
推荐指数
3
解决办法
11万
查看次数

在JavaScript中尝试{}没有catch {}?

我有许多函数可以返回一些东西或抛出错误.在main函数中,我调用其中的每一个,并希望返回每个函数返回的值,或者如果第一个函数抛出错误,则继续执行第二个函数.

基本上我现在拥有的是:

function testAll() {
    try { return func1(); } catch(e) {}
    try { return func2(); } catch(e) {} // If func1 throws error, try func2
    try { return func3(); } catch(e) {} // If func2 throws error, try func3
}
Run Code Online (Sandbox Code Playgroud)

但实际上我只想try返回它(即如果它没有抛出错误).我不需要catch块.但是,代码try {}失败,因为它缺少(未使用的)catch {}块.

在jsFiddle上举了一个例子.

那么,是否有任何方法可以catch在实现相同效果的同时移除这些块?

javascript return function try-catch

101
推荐指数
6
解决办法
6万
查看次数