标签: try-catch-finally

Try、Catch、Finally 中抛出异常 VS 返回错误

我很确定我已经知道答案,但我仍然很好奇在 Try、Catch、Finally 块中处理错误的意见是什么 -但是当您重复自己时。

顺便说一句 - 我不是在谈论用户输入 - 而是使用它作为示例,因为它清晰且简短

考虑这段代码...

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        logError("User input not correct format");
        return someErrorMessage; // repeats itself
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage; // repeats itself
}
Run Code Online (Sandbox Code Playgroud)

假设我们有一个函数,如果它失败了,我们想返回一条错误消息,因为异常是无关紧要的——我们的函数没有成功,用户不需要任何额外的细节。

我一直坚信,如果你能处理错误,就避免异常——因为它不再是异常了,但我想知道关于避免重复自己的意见......你可以执行以下操作来避免重复你自己...

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        throw new Exception("User input not correct format");
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage;
}
Run Code Online (Sandbox Code Playgroud)

这不是最好的例子,但为了简洁起见,我想说明重复代码的要点。

众所周知,异常会导致性能损失,但是对于这种情况有何想法呢?

exception try-catch try-catch-finally

4
推荐指数
1
解决办法
3万
查看次数

为什么我的"终于"不会跑了?

我假设我在这里遗漏了一些非常微不足道的东西,但由于理由这对我来说并不明显.我总是假设"最终"总是执行,无论是否有异常.

无论如何,这段代码无法运行,我不知道为什么.它到达i = i/j并抛出DivideByZero异常,但我认为它会继续并在停止之前执行finally语句.

static void Main(string[] args)
{
    int i = 1;

    try
    {
        int j = 0;
        i = i / j;

        Console.WriteLine("can't get");
    }
    finally
    {
        Console.WriteLine("finally ran");
    }
}
Run Code Online (Sandbox Code Playgroud)

try-catch-finally c#-4.0

4
推荐指数
1
解决办法
113
查看次数

如何在C#中使用try-finally构造?

我们在这个论坛上看到过很多关于try-catch-finallytry-finally建设的问题.

答案的数量增加了问题的数量,所以我也很少.

这是Microsoft解释try-finally构建的链接.我已经读过了!

在下面的文章中写道:

在处理的异常中,保证运行关联的finally块.但是,如果未处理异常,则finally块的执行取决于如何触发异常展开操作.反过来,这取决于您的计算机的设置方式.

  1. 我是否正确地理解在try-catch-finally施工finally中将永远执行?(不包括Environment.FastFail())

    我已经在这个论坛上读到过StackOverFlowException(这个finally块没有在这个场合执行过),但是当我throw这个时,finally块被执行了.那有什么关系StackOverFlowException

  2. 为什么finally不调用块?(在下面的代码中)?

  3. 我们一般使用哪些情况try-finally

  4. 从什么PC设置finally块依赖?


using System;
namespace ConsoleApplication1
{
class Program
    {
    static void Main(string[] args)
        {
            try
            {
                throw  new Exception(); 
            }                              
            finally
            {
                Console.WriteLine("finally");
                Console.ReadKey();
            }
        }
    }
}    
Run Code Online (Sandbox Code Playgroud)

c# finally try-catch-finally try-finally

4
推荐指数
1
解决办法
155
查看次数

异常处理放置 - C#

我决定删除代码中的一些using语句,这样我就可以捕获特定的异常并手动处理资源.我已经重构了一些代码,使其更具可读性和maintable,执行新的try/catch块,如果他们已经被正确地放置在手头的任务,我在想后.

例:

public static DataTable Select(string table, string[] column, Object operand)
{
        DataTable dTable = null;
        SQLiteConnection connection = null;
        SQLiteCommand command = null;
        SQLiteDataReader dReader = null;

        //convert to array for arguments
        StringBuilder query = new StringBuilder();
        query.Append("select ");

        for (int i = 0; i < column.Length; i++)
        {
            query.Append(column[i]);

            if (i < column.Length - 1)
            {
                query.Append(",");
            }
        }
        query.Append(" from ");
        query.Append(table);

        try
        {
            connection = new SQLiteConnection(_connectionString);
            command = new SQLiteCommand(query.ToString(), connection);
            dTable = …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling try-catch-finally

3
推荐指数
1
解决办法
3663
查看次数

仅在引发异常时清理对象

如果不是所有必须在其上完成的操作都成功(即,如果引发异常),我需要删除一个文件.它可以像使用一样简单,除了:,删除文件然后重新引发异常,但是在这种情况下,如果由于任何神秘的原因无法在except子句中删除文件,原始异常将会丢失.

我能想到的最好的是:

try:
    file_path = "whatever.jpg"
    # do stuff with file
except:
    exception_raised = True
    raise
finally:
    try:
        if exception_raised:
            os.unlink(file_path)
    except:
        pass

return file_path   # everything OK
Run Code Online (Sandbox Code Playgroud)

有人知道更好,更Pythonic的方法吗?

python exception try-catch-finally

3
推荐指数
1
解决办法
180
查看次数

无法捕获COMException(vb.net)

我使用以下代码访问VSS项目:

Dim sItem As String = "$/MyVssProject/InexistentFile.txt"
Dim oItem As SourceSafeTypeLib.VSSItem = Nothing
Try
  oItem = m_oSourceSafe.VSSItem(sItem)
Catch ex As Runtime.InteropServices.COMException
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
Catch ex As Exception
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,当我尝试将实例获取到VSSDB中不存在的文件时,从而导致COMException,这基本上不会出现问题(我希望如此)。实际上,发生了异常,但是调试光标没有停留在捕获代码上,而是停留在“ oItem = m_oSourceSafe.VSSItem(sItem)”行上,显示标题为“ COMException越过本机/托管边界的对话框”。

从这里开始执行不会执行,直到我将sItem的内容更改为现有文件。

为什么未捕获到异常,如何实现?

环境:WinXP SP3 x86上带有.Net 2.0的VS2010

谢谢队友!

vb.net exception-handling visual-sourcesafe try-catch-finally vb.net-2010

3
推荐指数
1
解决办法
4593
查看次数

为什么会选择使用finally语句而不是catch语句?(JAVA)

我比较陌生Java,我还在努力了解基本面.我一直在学习try-catch语句形式的异常处理.这些很好,我理解我应该如何以及为什么要使用它们.令我困惑的是try-finally陈述.

更具体地说,我不明白为什么我不能只使用一个catch陈述来做同样的事情.选择将一些命令放在finally语句中而不是在语句中放入相同的语句有什么好处catch?这些陈述不会以完全相同的方式执行吗?

对不起,如果这是一个愚蠢或天真的问题.我只是不能完全理解使用该finally声明的好处.

java exception-handling try-catch try-catch-finally

3
推荐指数
1
解决办法
275
查看次数

困惑于try-catch-finally问题?

我试图弄清楚try-catch-finallyin的执行顺序java.我认为执行顺序应该是

  1. 尝试
  2. catch(如果发生错误/捕获异常)
  3. 最后(无论是否被捕获)

但我对以下结果感到困惑

public class TryCatchFinally {
static int i = 0;
public static void main(String[] args) {
    try {
        System.out.println(i++);
        main(args);
    } catch (StackOverflowError e) {
        System.out.println("Catch");
    } finally {
        System.out.println("Finally");
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

出局(出局的一部分)

9127
9128
9129
9130
CatcFCatch // what is the wrong here???
Finally
Finally // there are more Finally printed here.
Run Code Online (Sandbox Code Playgroud)

我的问题是这里真的发生了什么?

让我添加更多为什么它不打印"Catch"

我在运行时得到了这个IntelliJ IDEA.但是当我跑进去的时候,我会terminal按照以下方式退出.

9151
9152
9153
9154CatchFinallyCatch
Finally
Finally
Finally
Finally
Run Code Online (Sandbox Code Playgroud)

java exception try-catch-finally

3
推荐指数
1
解决办法
160
查看次数

java中的try-catch-finally块

根据我的理解,我希望遵循最终释放资源的最佳实践,以防止任何连接泄漏.这是我在HelperClass中的代码.

public static DynamoDB getDynamoDBConnection()
{   
    try
    {
        dynamoDB = new DynamoDB(new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
    }
    catch(AmazonServiceException ase)
    {
        //ase.printStackTrace();
        slf4jLogger.error(ase.getMessage());
        slf4jLogger.error(ase.getStackTrace());
        slf4jLogger.error(ase);
    }
    catch (Exception e)
    {
        slf4jLogger.error(e);
        slf4jLogger.error(e.getStackTrace());
        slf4jLogger.error(e.getMessage());
    }
    finally
    {
        dynamoDB.shutdown();
    }
    return dynamoDB;
}
Run Code Online (Sandbox Code Playgroud)

我的疑问是,既然finally块将被执行,无论如何,dynamoDB将返回空连接,因为它将在finally块中关闭然后执行return语句?TIA.

java program-flow try-catch-finally amazon-dynamodb

3
推荐指数
1
解决办法
697
查看次数

为什么最终在java中有用?

我想知道为什么测试finally后有用try catch呢?在任何情况下,finally将执行语句后定义的代码.

这两个代码有什么区别?

try{
    int a = 1 / 0;
} catch(ArithmeticException e){
    System.out.print("Hi");
} finally {
    System.out.print("It's me again...");
}
Run Code Online (Sandbox Code Playgroud)

并且:

    try{
    int a = 1 / 0;
} catch(ArithmeticException e){
    System.out.print("Hi");
}
System.out.print("It's me again...");
Run Code Online (Sandbox Code Playgroud)

即使出现错误,"It's me again..."也会显示..

java try-catch-finally

3
推荐指数
1
解决办法
547
查看次数