2011-04-04 94 views
4

今天我遇到了一个有趣的情况:我有一个设置文件的小应用程序,在文档中有详细记录,但如果文件不存在,什么是更好的方法是抛出filenotfoundexception并给出设置文件不可用的非常抑郁的消息,或者创建一个名为SettingsFileNotFoundException的自定义异常(已经是缺点,即使这样做需要10分钟)。这会立即让它消失,问题是什么。自定义异常vs内置异常非常具有描述性的消息

第一种方法(标准异常+消息)的问题是,在团队环境中,只有严格按照程序进行操作时才会起作用。

尽管我对这里的语言细节没有特别的兴趣,但语言是C#。

哪个更好?

感谢

+0

是代码将会捕获的异常,还是您想要控制应用程序崩溃时显示的异常消息? – 2011-04-04 22:25:39

回答

3

如果你在不同的级别捕SettingsFileNotFoundException(在不同的,调用方法),那么它可能是有意义的创建一个自定义异常,因为您可能需要确定到底是什么错误了。一种过于简单化的例子如下:

void startingMethod() 
{ 
    try 
    { 
     secondMethod(); 
     thirdMethod(); 
    } 
    catch (SettingsFileNotFoundException sfnfe) 
    { 
     // Handle all SettingsFileNotFoundException issues here. 
    } 
    catch (Exception ex) 
    { 
     // Handle all other exceptions here. 
    } 
} 

void secondMethod() 
{ 
    // TODO: secondMethod actions. 
    var fileName = SomeLogicSpecificToSecondMethodHere(); 

    if (!File.Exists(fileName)) 
    { 
     throw new SettingsFileNotFoundException("..."); 
    } 
} 

void thirdMethod() 
{ 
    // TODO: thirdMethod actions. 
    var fileName = SomeOtherLogicSpecificToThirdMethodHere(); 

    if (!File.Exists(fileName)) 
    { 
     throw new SettingsFileNotFoundException("..."); 
    } 
} 

在上述例子中,对于多个设置文件的程序搜索,因此具有使用异常多个throw()语句。嵌套的异常捕获允许所有这些异常以相同的方式处理,而无需在您的两个辅助方法中使用相同的代码。在这里,将您的自定义异常作为不同类型允许以与您的其他错误处理方式不同的方式处理该特定异常。

但是假设你没有做错误处理的这种幻想,你描述的第一种方法更好,因为它是广义的。为什么你会创建一个只能抛出一次的异常?我假设你将变量缓存到变量中,所以你不需要每五秒钟读一次你的文件,这样就可以在应用程序的初始化过程中将新的异常限制为一次。

因此,在您的情况下,除非您很可能将代码扩展为将来使用更复杂的错误处理,否则应该只对FileNotFoundException使用非常特定的消息。