我有一些代码现在看起来有点像这样:
public void MainFunction()
{
try
{
SomeProblemFunction();
}
catch
{
AllFineFunction();
}
}
private void SomeProblemFunction() { ... }
private void AllFineFunction() { ... }
如您所见,我目前正在将对SomeProblemFunction
的调用包装在try
语句中,因为该函数可能会失败(它依赖于外部web服务调用)。
我的问题是:try
语句应该是a)在问题函数之外(就像我现在看到的那样)还是b)在问题函数内部?
谢谢。
根据经验,我尝试构建代码,将try捕获集中到问题可能发生的确切位置。
也就是说,你的两个解决方案都是正确的。
如果是我的代码我会这么做
public void MainFunction()
{
try
{
SomeProblemFunction();
}
catch(Exception e)
{
Messagebox.Show(e.Message);
}
}
private void SomeProblemFunction() {
try{
web call
}
catch{
throw a specific exception related to this spot
}
}
private void AllFineFunction() { ... }
使用此方法,您可以轻松创建处理大量非常准确的异常的应用程序
你所拥有的是正确的;请参见MSDN示例:
public class ThrowTestB
{
static void Main()
{
try
{
// TryCast produces an unhandled exception.
TryCast();
}
catch (Exception ex)
{
// Catch the exception that is unhandled in TryCast.
Console.WriteLine
("Catching the {0} exception triggers the finally block.",
ex.GetType());
// Restore the original unhandled exception. You might not
// know what exception to expect, or how to handle it, so pass
// it on.
throw;
}
}
public static void TryCast()
{
int i = 123;
string s = "Some string";
object obj = s;
try
{
// Invalid conversion; obj contains a string, not a numeric type.
i = (int)obj;
// The following statement is not run.
Console.WriteLine("WriteLine at the end of the try block.");
}
finally
{
// Report that the finally block is run, and show that the value of
// i has not been changed.
Console.WriteLine("\nIn the finally block in TryCast, i = {0}.\n", i);
}
}
// Output:
// In the finally block in TryCast, i = 123.
// Catching the System.InvalidCastException exception triggers the finally block.
// Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
}
通常,您希望允许异常传播到应用程序边界。除了你自己,你只想做几件事中的一件:
更新
从您的问题来看,您似乎在为web服务调用寻找容错解决方案。这是一个更复杂的问题,而不仅仅是“我该把我的试捕器放在哪里?”您仍然可以将异常处理放在应用程序边界上,但在那里您可以实现容错策略。这需要考虑很多因素,包括异步调用web服务、重试次数等。我建议搜索web服务容错性。
本文向大家介绍Python用Try语句捕获异常的实例方法,包括了Python用Try语句捕获异常的实例方法的使用技巧和注意事项,需要的朋友参考一下 python的异常,以及用try复合语句处理异常。 运行代码时有时会出现各种各样的错误,致使解析器中断执行,并提示xxxxxxErorr的提示,后面跟具体的错误的描述,这被称为是引发了异常。 其实异常告诉我们的是遇到了什么类型的错误。xxxxErorr
有什么办法可以做到这一点吗? 我想我可以使用scanner来代替它,但是我只是好奇是否有办法在捕获异常后重复try语句。
我正在做一个3D阵列项目,我需要测试一个细胞周围的每个细胞。但是,如果单元位于数组的边缘,则在数组之外测试单元将抛出越界异常。我想用catch语句来解决这个问题,但是编写一个try-and-catch来测试每个块需要非常大量的代码(3D数组中一个单元周围有8个单元)。有没有一种方法可以用一次捕捉多次“尝试”,然后继续它停止的地方?例如,如果tester方法测试一个越界单元格,我需要它不仅捕获,而且
在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在 try 块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。 所以为了确保一定能回收 try 块中打开的物理资源,异
我刚刚开始用java编写一个21点游戏。我试图让程序要求用户再次输入,如果他们输入的现金不是一个有效的整数。我看到许多带有catch的try语句示例,但没有一个是有效的。程序给出的错误InputMismatchException无法解析为类型。我遵循的一个线程就是这个,我有完全相同的代码,只是变量名不同。给你。Java输入不匹配异常 这是我的密码: 任何关于为什么我几乎精确的代码不起作用的帮助都将
问题内容: 有没有更好的方法来执行以下操作: 看起来很讨厌,我不想这样做: 保持最高效率。 问题答案: 也许您可以尝试这样的事情: 您可以这样称呼它: 这将尝试按它们在列表中的顺序调用这些方法。如果您想传递任何参数,可以像下面这样在列表之后传递它们: