我不太清楚我的主题"proper exception handling"
。
“只有在您可以采取措施修复时才能捕获例外情况 这种特殊情况“。
我不明白这一点。例如:
如果我没有抓住FormatException
抛出的Convert.toInt()
,即使它只是向用户显示异常消息,我的程序也会崩溃。如果我抓住了这个异常并且只是告诉用户输入的格式错误,那么它就能幸免于难。
那么,我是否应该抓住这些例外?
答案 0 :(得分:4)
只有在您可以采取措施进行修复时才能捕获异常 这种特殊情况
修复可能不是这里最好的词。如果你能处理它,你应该捕获异常。处理可能意味着:
但是你不应该抓住异常而不做任何事情:
catch(FormatException ex)
{
}
只是吞下了异常,你永远不会知道是不是发生了什么事。
答案 1 :(得分:1)
这并不意味着你让异常处理不当。这意味着无法正确应用程序流,因此代码应返回并通知调用者(异常或消息)。在你的情况下,因为输入是无效的,所以你应该处理异常并让调用者知道这里有什么问题。
答案 2 :(得分:1)
这是一个很难回答的问题,当然这取决于您的设计,应用偏好。
处理异常时,我会尝试遵循以下规则:
当然,每个人对错误处理都有不同的看法,因此很难得到明确的答案。我的建议是建立你自己的一套规则(除非有人付钱给你,在这种情况下跟随他们!)。
答案 3 :(得分:1)
换句话说,不要捕捉您不知道如何处理的异常。最终应该在某个时候处理任何异常(因此你的程序不会崩溃),但你应该在何时以及如何做到这一点时制定合理的策略。
答案 4 :(得分:1)
是的,我认为您应该捕获此异常,因为实际上您可以通过警告用户输入的格式错误来处理它。
还有其他解决方案可以避免出现格式异常的可能性,例如,如果您要求一个整数,而您的应用程序是WPF / Winform / Web应用程序,则可以使用NumericUpDown控件来确保用户输入整数。此外,您可以使用此类代码,因此您无需管理例外:
if (int.TryParse(userEnteredValue, out resultInt))
{
}
答案 5 :(得分:0)
如果我没有捕获Convert.toInt()抛出的FormatException,即使它只是向用户显示异常消息,我的程序也会崩溃。
是的,这是一个例外情况,可以正确处理。预计会发生来自用户的错误输入,您应该处理它。
但是还有其他类别的错误,你可以做的事情很少。例如,OutOfMemoryException
。
答案 6 :(得分:0)
“修复”这种情况并不一定纠正它。当您发现错误并通知用户此错误时,这可能足以“修复”它。 E. g。你可以让用户更正输入。
您的引用意味着您不应该这样做:
try
{
// do something which can throw
}
catch(Exception ex) // even this is bad practice as you should try to catch specific exceptions
{
// do nothing
}
答案 7 :(得分:0)
这取决于您在捕获特定异常时可以为用户提供的可用性。
假设您正在根据用户输入的参数进行一些计算,并且有一个字段是可选的。
现在,如果用户为该字段输入了一些字符串而不是数字字段,那么如果您没有捕获异常,程序将崩溃。
Bu,即使你遇到了这个异常,你的计算也不会完成,因为你会在抛出异常后跳过计算。
但是在这种情况下你可以做的是,检查是否为该可选字段抛出了FormatException
。如果是,请使用catch忽略该异常,并将该值设置为某个默认值,例如0,然后像往常一样继续计算。