使用Try-Catch Finally处理算术异常
本文关键字:异常 处理 Try-Catch Finally 使用 | 更新日期: 2023-09-27 18:00:51
我想尝试两种不同的方法(都有很强的失败可能性(,因此我想使用"finally"语句来运行"安全",以防前两次尝试都失败。
举下面的例子(不,这不是我在项目中使用的代码!(。
int zero = 0;
int one = 1;
try
{
// Throws ' cannot divide by zero ' error
int error = one / zero;
}
catch
{
// Throws error again of course
int somenum = one / zero;
}
finally
{
MessageBox.Show("I can never make it here ...");
}
所以,我想让我的程序做以下事情:
- 尝试除以零
- 如果步骤#1失败,我希望"catch"语句运行其代码(在本例中应该再次失败(
- 如果步骤#1和步骤#2都失败,我希望我的程序在"finally"语句中显示MessageBox
我和这个接近吗?
int zero = 0;
int one = 1;
try {
try
{
// Throws ' cannot divide by zero ' error
int error = one / zero;
}
catch (DivideByZeroException)
{
// Throws error again of course
int somenum = one / zero;
}
}
catch (DivideByZeroException)
{
MessageBox.Show("I can never make it here ...");
}
根据我的经验,你似乎需要在第一次捕获中再尝试一次:
int zero = 0;
int one = 1;
try
{
// Throws ' cannot divide by zero ' error
int error = one / zero;
}
catch
{
try
{
// Throws error again of course
int somenum = one / zero;
}
catch { }
}
finally
{
MessageBox.Show("I can never make it here ...");
}
原因是您在catch
块上生成了一个异常,但没有处理它。
try
{
int error = one / zero; // throws an exception
}
catch // catches
{
int somenum = one / zero; // throws again
}
// no code to handle the exception
// application crashes
可以避免放置嵌套的try catch
块。
在实践中,您不应该在catch中放置可能失败的代码。
对于您的样本,您应该使用嵌套的try-catch finally
int zero = 0;
int one = 1;
bool flag=false;
try
{
try
{
int error = one / zero;
}
catch
{
flag=false;
}
if(flag==false)
int error = one / zero;
}
catch
{
MessageBox.Show("I can never make it here ...");
}
使用finally部分释放您的资源,在尝试或捕获后,您的代码将100%执行。
你所做的一切都会奏效。但请注意,在finally块中显示消息之后,异常将重新抛出。