问题标签 [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 投票
1 回答
5267 浏览

vb.net - 无法捕获 COMException (vb.net)

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

我面临的问题是,当我尝试获取 VSSDB 中不存在的文件的实例时,会导致 COMException,这基本上不会有问题(我希望)。实际上发生了异常,但调试光标没有继续执行 catch 代码,而是停留在“oItem = m_oSourceSafe.VSSItem(sItem)”行上,显示一个标题为“COMException crossed a native/managed boundary”的对话框。

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

为什么异常没有被捕获,我该如何实现呢?

环境:在 WinXP SP3 x86 上使用 .Net 2.0 的 VS2010

谢谢小伙伴们!

0 投票
3 回答
261 浏览

java - catch 和 finally 中 return 语句的行为

它将返回“10”。

现在我只是将返回类型 Integer 替换为 StringBuilder 并更改了输出。

输出为“abcaaa”

那么,任何人都可以详细解释我。有什么区别。?

0 投票
1 回答
469 浏览

scala - 终于在 try/catch 块中“超出范围”

有没有办法访问在 finally 块内的 try/catch 块中创建的 val?或者是最终块超出范围。

0 投票
3 回答
3291 浏览

c# - 为什么 finally 块中的代码不执行?

如果除了主线程执行代码之外,finally 块似乎不会执行。在这种情况下是否可以强制执行 finally?

环境:VS 2010,.Net Framework 4.0.3


更新:

我在 MSDN 中找到了关于该案例的提及和解释:

ThreadAbortException 类 http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx

当调用 Abort 方法来销毁线程时,公共语言运行时会引发 ThreadAbortException。ThreadAbortException 是一个可以被捕获的特殊异常,但它会在 catch 块结束时自动再次引发。引发此异常时,运行时会在结束线程之前执行所有 finally 块。因为线程可以在 finally 块中进行无限计算或调用 Thread.ResetAbort 来取消中止,所以不能保证线程会结束。如果要等到中止的线程结束,可以调用 Thread.Join 方法。Join 是一个阻塞调用,直到线程真正停止执行才返回。

笔记:

当公共语言运行时 (CLR) 在托管可执行文件中的所有前台线程都结束后停止后台线程时,它不会使用 Thread.Abort。因此,您不能使用 ThreadAbortException 来检测后台线程何时被 CLR 终止。


前台和后台线程 http://msdn.microsoft.com/en-us/library/h339syd0.aspx

当运行时因为进程正在关闭而停止后台线程时,线程中不会引发异常。但是,当线程因 AppDomain.Unload 方法卸载应用程序域而停止时,前台和后台线程都会引发 ThreadAbortException。


那么为什么在应用程序结束时 CLR 不使用 AppDomain.Unload 方法在主进程结束(杀死)之前卸载应用程序域?因为http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx

当线程调用 Unload 时,目标域被标记为卸载。专用线程尝试卸载域,并且域中的所有线程都被中止。如果线程没有中止,例如因为它正在执行非托管代码,或者因为它正在执行 finally 块,那么在一段时间后,在最初调用 Unload 的线程中会抛出一个 CannotUnloadAppDomainException。如果无法中止的线程最终结束,则不会卸载目标域。因此,在 .NET Framework 2.0 版域中,不能保证 unload,因为它可能无法终止正在执行的线程。

结论:在某些情况下,我需要考虑我的代码是在后台还是前台线程中执行?在应用程序主线程结束所有工作之前,我的代码是否可能不会完成?

0 投票
1 回答
2844 浏览

objective-c - Objective-c Try/Catch not catching

Is there a reason why the following wouldn't work?

Similar to the try/catch question, only it seems the above block crashes everytime. I know my debugger is setup correctly, as I setup a try/catch above from the other question:

0 投票
4 回答
1728 浏览

java - 声明异常而不是处理异常有什么意义

据我了解,如果您只声明一个已检查的异常,它将通过您的所有方法传播到主要方法,并且仍然会中断您的正常程序流程,您的程序仍然会停止工作。那么,为什么不总是使用 try/catch 处理已检查的异常……这样您的程序就不会因异常而停止?为什么要在方法的签名中声明一个异常?对不起,我的英语不好

0 投票
1 回答
3422 浏览

java - 在 finally 部分尝试 catch

在 finally 子句中编写 try 和 catch 是否被认为是糟糕的编程?

我在我的主要方法中有一个我想关闭的 fileInputStream。我想将 .close() 放在最后,所以无论如何它都会关闭。我不想在 main 方法中添加 throws 声明,因为它是 main 方法:P

可以吗?谢谢

0 投票
2 回答
3410 浏览

vb.net - 为什么要在 finally 块中将对象设置为 Nothing?

在这个 VB.NET 代码中:

为什么需要将 o 设置为Nothing?如果我不将其设置NothingFinally块怎么办?我认为如果你不设置它是可以的,Nothing因为该对象将被标记为 GC。

0 投票
2 回答
629 浏览

java - 最后阻止在 Oracle 的 JAVA 存储过程中不起作用

当我编译下面的代码时,它显示错误“找不到符号变量”但是如果我在 finally 块中注释代码,我能够成功编译。

请指教。

0 投票
2 回答
5687 浏览

python - python:如果finally块引发异常,则从try块中恢复异常

假设我有一些这样的代码:

输出是:

从该打印语句的角度来看,有什么方法可以访问 try 中引发的异常,还是它永远消失了?

注意:我没有考虑用例;这只是好奇。