在处理异常时,我有一个问题需要重新编写正确的编程习惯。 我们有生产代码,如:
try
{
File.Copy(src,dest);
}
catch(Exception ex)
{
ShowMessageToUser(ex.Message);
}
这是一个好习惯吗?我认为我们应该总是使用专门的异常并捕获它们....另一方面,我确实知道File.Copy可以抛出几个不同的异常,为每个异常编写一个catch块会很痛苦。 ..?那么在这种情况下应该做些什么....是否有一组我们可以用来捕获的文件特定的例外集合?
谢谢,欢迎任何评论。
答案 0 :(得分:2)
作为一般惯例,我认为这不是一个好习惯。就个人而言,我会用不同的例外处理这个问题,并且只处理你可以正确处理的异常。
在这个特定场景中,我也会避免这种情况。我更愿意处理显式异常类型,除非是为了自定义消息给用户。
这主要是因为异常消息实际上不是针对最终用户的 - 它们是要由开发人员解释的消息。我觉得直接向用户显示异常消息,特别是对于可能发生异常的操作,这是一种不好的做法。
您应该处理每个异常,并在此操作的上下文中为用户提供有意义的消息。
File.Copy只能抛出8种类型的异常 - 使用消息处理每一种异常只有32行代码 - 当你考虑到有一个清晰,有意义的消息的额外好处时,这真的不是那么多所有案例都提交给最终用户。
答案 1 :(得分:1)
看起来似乎很多工作,但有时需要做很多工作才能制作出稳定的节目。
答案 2 :(得分:0)
您可以使用专门的异常来根据您获得的错误类型执行不同的操作。如果您只想向用户显示默认错误消息...那么您的代码就足够了。
但是,举个例子说,如果由于安全问题而发生异常,你会想要记录异常...你会写下这样的话:
catch (PermissionDeniedException ex)
{
Log(ex.foo);
ShowMessageToUser(ex.Message);
}
catch(Exception ex)
{
ShowMessageToUser(ex.Message);
}
记住要始终从更具体到更一般的例外。
答案 3 :(得分:0)
是的,这是一个不好的做法,你应该使用特定的例外情况,然后通用Exception
降低catch
块。
如果你觉得它们太多了,你应该至少为大多数预期的文件特定异常创建catch块,然后有通常的异常捕获块
答案 4 :(得分:0)
您的示例很容易实现,但几乎没有最佳做法。作为一般规则