[英]Catching exceptions with try-catch
我不太了解"proper exception handling"
主题。
“只有在您可以采取某些措施来解决这种特殊情况时,才应捕获异常”。
我不明白 例如:如果我没有捕获Convert.toInt()
抛出的FormatException
,即使只是向用户显示异常消息,我的程序也会崩溃。 如果我发现了此异常并只是告诉用户输入格式错误,那么该输入将继续存在。
那么,是否应该捕获此类异常?
仅当您可以采取某些措施来解决异常情况时,才应捕获异常
在这里修复也许不是最好的词。 如果可以处理,则应捕获异常。 处理可能意味着:
但是您不应该捕获异常并且什么也不做:
catch(FormatException ex)
{
}
那只会吞下异常,您将永远不知道是否发生了不好的事情。
这并不意味着您让异常未处理。 这意味着无法正确应用程序,因此代码应返回并通知调用方(异常或消息)。 并且在您的情况下,因为输入无效,因此您应该处理异常,并让调用者知道此处的错误。
这是一个很难回答的问题,它当然取决于您的设计,应用程序首选项。
处理异常时,我尝试遵循以下规则:
当然,对于错误处理,每个人都有不同的看法,因此很难获得明确的答案。 我的建议是建立自己的规则集(除非有人付钱给您,否则请遵循他们的规则!)。
换句话说,不要捕获您不知道如何处理的异常。 最终,任何异常都应在某个时候处理(这样程序就不会崩溃),但是您应该有一个合理的策略,确定何时以及如何执行。
是的,我认为您应该捕获此异常,因为实际上您可以通过警告用户其输入格式错误来在catch块中对其进行处理。
还有其他解决方案可以避免出现格式异常的可能性,例如,如果您要求整数,而应用程序是WPF / Winform / Web应用程序,则可以使用NumericUpDown控件来确保用户输入整数。 您也可以使用这种代码,因此不必管理异常:
if (int.TryParse(userEnteredValue, out resultInt))
{
}
如果我没有捕捉到Convert.toInt()引发的FormatException,即使只是向用户显示异常消息,我的程序也会崩溃。
是的,这是一个例外情况, 可以正确处理。 预期会出现来自用户的错误输入,对此,您应该进行处理。
但是,还有其他几类错误,您几乎无能为力。 例如, OutOfMemoryException
。
“修复”这种情况并不一定要纠正它。 当您发现错误并通知用户该错误时,可能足以“修复”它。 例如 您可以让用户更正输入。
您的报价表示您不应执行以下操作:
try
{
// do something which can throw
}
catch(Exception ex) // even this is bad practice as you should try to catch specific exceptions
{
// do nothing
}
这取决于您在捕获特定异常时可以为用户提供的可用性。
假设您要根据用户输入的参数进行一些计算,并且有一个字段是可选的。
现在,如果用户在该字段而不是数字字段中输入一些字符串,则如果您没有捕获到异常,则程序将崩溃。
Bu,即使您捕获了该异常,您的计算也不会完成,因为在引发异常之后您将跳过计算。
但是在这种情况下,您可以做的是检查是否为该可选字段引发了FormatException
。 如果是,请使用catch忽略异常,并将该值设置为某个默认值,例如0,然后照常进行计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.