问题标签 [try-catch-finally]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
45389 浏览

.net - 为什么在 Try ... Catch 中使用 finally

我看到FinallyinTry .. Catch将始终在执行 try catch 块的任何部分之后执行。

跳过该Finally部分并在 try catch 块之外运行它有什么不同吗?

示例 1,Try ... Catch ... Final ... End Try

示例 2,Try ... Catch ... End Try ... 做最后的事情

0 投票
10 回答
17178 浏览

java - Try-catch-finally 然后再次尝试捕获

我经常遇到这样的情况:-

最后仍然需要一个 try - catch 块。

克服这个问题的最佳做法是什么?

0 投票
5 回答
13070 浏览

c# - 使用语句和 try-catch()-finally 重复?

using(...) 语句是 try{} finally {} 的语法糖。

但是,如果我有如下的 using 语句:

现在我想捕获打开此文件可能导致的异常(这是相当高风险的代码,因为它可能由于环境而失败),但是如果我在里面写 try-catch 会不会是重复?当代码被编译为 IL 时,我假设当代码被 JITted 时重复将被删除?

但是,我想捕获打开文件可能导致的异常(因此我应该将 try-catch 包装在 using 语句的范围之外),以及我在 using 块内执行的任何操作的异常,因此我应该添加 try-catch块内。

这似乎是我在 CLR 内部可能执行的操作中添加了很多重复内容。CLR 是否添加了 catch 子句?

我的同事认为 using 语句很混乱(但这是因为我对它们进行了硬编码,因为我需要非常快速地更改它们并且无法访问代码库的其他部分,因此单行稍长)。说同事不使用 using 语句,但是 using 语句和 try-finally/try-catch-finally 之间是否存在任何功能差异?我确实看到了一个案例,其中 WCF 服务有一个不为人知的关于使用 finally 和返回值(关于 finally)的极端案例。解决方案是使用检查块。C#中有这样的东西吗?

另一方面,是否所有实现 IDisposale 非托管资源所有者的类型?与我朋友的讨论指出答案是否定的。(我也在这个论坛的使用部分阅读了一些主题,那里有一些非常好的知识)。

0 投票
6 回答
106304 浏览

java - Java 的 System.exit() 如何与 try/catch/finally 块一起工作?

我知道涉及在 try/catch/finally 块中返回的头痛 - 在 finally 中的返回始终是方法的返回的情况下,即使 try 或 catch 块中的返回应该是执行的返回。

但是,这同样适用于 System.exit() 吗?例如,如果我有一个 try 块:

如果没有异常,哪个 System.exit() 会被调用?如果 exit 是一个 return 语句,那么 System.exit(1) 行将始终 (?) 被调用。但是,我不确定退出的行为是否与返回不同。

该代码处于极端情况下,即使不是不可能,也很难重现,因此我无法编写单元测试。如果我有几分钟的空闲时间,我将在今天晚些时候尝试运行一个实验,但我还是很好奇,也许 SO 上的某个人知道答案并且可以在我无法运行之前提供它实验。

0 投票
10 回答
2431 浏览

c# - 如何将程序流显式传递到 C# 中的 finally 块中?

在德尔福我可以做这样的事情:

换句话说,如果方法DoSomething结果为假,则程序流被转移到 finally 块并且DoSomething2DoSomething3被执行。

如何在 C# 中实现这种行为?

提前致谢。

Edit1: 下面的示例在 VS 2008 中无法编译

Edit2:对不起,我太快忘记了退货声明;

Edit3: 经过测试,似乎实现这一目标的最简单方法是如果结果DoSomething1为假则抛出异常。我可以抛出我自己的执行,写一个特定的消息并将它传递给 finally 子句。

0 投票
5 回答
4083 浏览

try-catch - 在 Siebel 中尝试 Catch 块

我有一个脚本,它将一组记录发送到一个文件中。我正在使用 Try - Catch 块来处理异常。在 catch 块中,我有一个代码,其中包含指向下一条记录的指针。但这不是执行。基本上我想跳过坏记录 n 移动到下一个记录。

0 投票
4 回答
7911 浏览

objective-c - 在 Cocoa 应用程序中使用异常处理与 NSError

大家好。我一直在阅读 Apple 关于何时/何地/如何使用 NSError 与 @try/@catch/@finally 的建议。从本质上讲,我的印象是 Apple 认为最好避免使用异常处理语言结构,除非作为在意外错误情况下停止程序执行的机制(也许有人可以举一个这种情况的例子?)

我来自 Java,当一个人想要处理错误时,异常是要走的路。诚然,我仍然在 Java 思想领域,但我正在慢慢掌握 NSError 所提供的一切。

我挂断的一件事是发生错误时清理内存的任务。在许多情况下(例如,使用 C、C++ 库、CoreFoundation 等),您需要在因错误而中断函数之前进行大量内存清理。

这是我编写的一个示例,它准确地反映了我遇到的情况。使用一些虚构的数据结构,该函数打开一个文件句柄并创建一个“MyFileRefInfo”对象,其中包含有关如何处理文件的信息。在关闭文件句柄并释放结构的内存之前,对文件进行了一些处理。使用Apple的建议我有这个方法:

现在.. 我的 Java 逻辑告诉我,最好将其设置为 try/catch/finally 结构并将所有调用以关闭文件句柄并在 finally 块中释放内存。

像这样。。

我是否疯狂地认为这是一个更优雅的解决方案,冗余代码更少?我错过了什么?

0 投票
2 回答
1031 浏览

ruby - 确保拆解在 Test::Unit::TestCase 中运行?

Test::Unit::TestCase用来写一些单元测试。目前,我有一个setup功能可以移动和修改磁盘上的一些夹具文件和文件夹。(目前这是一个必要的邪恶。)如果测试崩溃,teardown则不会调用该方法,从而留下文件和文件夹。下次我运行测试时,它会抱怨某某文件夹已经存在(Errno::EEXIST),这让我不得不停下来摆脱剩余的文件。

我怎么ensure总是teardown运行?(与其他一些语言ensure的想法相同finally。)

0 投票
10 回答
7165 浏览

c# - try-catch-finally 的用例与 catch 和 finally

我了解try-catch 的工作原理以及try-finally 的工作原理,但我发现自己(通常)在两个完全不同的场景中使用它们:

  • try-finally(或using在 C# 和 VB 中)主要用于一些中型代码块,这些代码块使用一些需要正确处理的资源。
  • try-catch主要用于
    • 围绕可能以非常特定的方式失败的单个语句或
    • (作为一个包罗万象的)在应用程序的一个非常高的级别,通常直接在一些用户界面操作之下。

以我的经验,try-catch-finally是合适的情况,即我想要捕获某些特定异常的块与我使用一些一次性资源的块完全相同的情况非常罕见。然而,C#VBJava的语言设计者似乎认为这是一个非常常见的场景。VB 设计者甚至考虑将catch添加到using.

我错过了什么吗?还是我对try-catch的限制性使用过于迂腐?


编辑:澄清一下:我的代码通常看起来像这样(为清楚起见展开功能):

这似乎比将两个catch中的任何一个都放在与finally相同的水平上只是为了避免缩进更有意义。

0 投票
4 回答
7540 浏览

c# - Try Catch - finally 在 If 语句中,之后如何进行?

我怎样才能做到这一点 ?