.NET中的错误和异常有什么区别?

时间:2010-03-12 19:15:49

标签: c# .net exception

您能否向我解释一下错误和异常之间的区别?

8 个答案:

答案 0 :(得分:13)

异常是从System.Exception类派生的类型的对象。它在throw语句中用于将控制权转移到调用堆栈上游某处catch块中的try子句。

错误只是您要解释的一些代码或消息。错误代码的问题在于您可以决定忽略它们:

MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();

如果返回错误代码,该调用将简单地忽略错误代码。但是:

MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();

这是不可忽视的,并会将控制权转移到堆栈,超过“SomeCodeThatShouldNotExecuteOnError();”。

答案 1 :(得分:13)

异常是一个利用语言语义的类。正如其他人所说,异常会中断执行堆栈直到被捕获。可以使用 例外来传达错误,但更常见的是用于表示发生了异常情况。

另一方面,错误可能是例外与否。

有几种错误:

  • 用户错误 - 应该无异常处理
  • 语法错误 - 这不应该用静态类型语言编译(在动态语言中,它们有点难以发现)
  • 运行时错误 - 这将导致异常,或者无声地失败(通常会产生意外结果)

实际上,异常应限于处理运行时错误,因为输入错误数据的用户不是“例外”。要处理用户错误,您应采取以下方法:

  • 防止输入错误数据(前端验证)
  • 防止坏数据被持久化(后端验证)

应将异常用作用户错误的“最后一道防线”。如果您正在编写持久层,则可以依赖异常来确保通过验证而丢失的错误数据不会持久存在。但是,您应该通过在验证中加入修复来解决这些问题,以防止错误首先发生。

答案 2 :(得分:2)

您必须编写要忽略的代码的例外情况。您必须将代码写入而不是忽略的错误代码。

答案 3 :(得分:2)

通常,我将它们归类为:

错误 - 是应用程序中的已知工作流程。例如:身份验证期间未提供的用户名是错误的 该应用程序可以处理这些情况和将能够向用户显示友好消息,以提示正确输入和/或处理不同的数据。

异常 - 在离开系统和/或应用程序中发生意外情况时通常会抛出。例如:由于权限不足或文件不存在,打开文件句柄可能会引发异常 通常在这种情况下,应用程序可以捕获这些异常和/或编写通用处理程序来处理系统中的所有异常。

根据经验,如果您知道由于应用程序无法继续工作而存在特定情况,请将其标记为错误&优雅地处理案件。

所有剩余的“未知 - 未知”可以归入“例外”类别。

HTH。

答案 4 :(得分:1)

如果没有给定异常的异常处理程序,程序将停止执行并显示错误消息。

未处理的例外是错误。因此,所有错误都是例外,但事实并非如此。 异常处理技术处理异常/意外情况(错误),而错误是我们预期不会发生的情况,所以我们必须通过将用户重定向到一些静态HTML页面来解决这些问题。将其捕获到Logs&找出错误发生的解决方案。

错误可能发生在2个级别

  • 页面级别(在页面指令处使用ErrorPage属性)
  • 应用程序级别(需要在web.config中处理)

编译   CustomError ... CustomError     错误....错误 汇编  注意 - 页面级错误处理会覆盖应用程序级错误处理。

异常处理: - >

答案 5 :(得分:0)

异常:当某个操作中的某个步骤失败时,该操作中的所有后续步骤都不会被执行。这是异常闪耀的地方。

错误:就像第一种情况一样,您希望暂停执行当前代码,但在此之前,您需要释放以前分配的任何资源。


说完了,

异常类有HResult property。 HRESULT是一个32位值,分为三个不同的字段:严重性代码,设施代码和错误代码

看一下这篇文章,会帮助你更好地理解

答案 6 :(得分:0)

异常是报告和处理执行失败的一种方式。换句话说,它们用于传达错误条件(在Framework Design Guidelines一书中解释Krzysztof Cwalina)。

答案 7 :(得分:0)

错误是事件。 Exception类表示在应用程序执行(运行时)期间发生的错误,并提供使用try catch块处理它们的机制。 错误可能是运行时或编译器错误。

错误事件的示例: System.Web的HttpApplication.Error事件,System.IO的FileSystemWatcher.Error事件 两个dll都具有相同的错误事件定义

public event EventHandler Error

来自.Net Framework 4.5文档https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx

异常类表示在应用程序执行期间发生的错误。

错误和例外

运行时错误可能由于各种原因而发生。但是,并非所有错误都应作为代码中的异常处理。以下是运行时可能发生的一些错误类别以及响应它们的适当方法。

使用错误。使用错误表示程序逻辑中可能导致异常的错误。但是,错误应该通过异常处理来解决,而不是通过修改错误的代码来解决。

程序错误。程序错误是运行时错误,无法通过编写无错代码来避免。

在某些情况下,程序错误可能反映预期或常规错误情况。在这种情况下,您可能希望避免使用异常处理来处理程序错误,而是重试该操作。

在其他情况下,程序错误反映了可以在代码中处理的意外错误情况。

系统故障。系统故障是运行时错误,无法以有意义的方式以编程方式处理。例如,如果公共语言运行库无法分配额外的内存,则任何方法都可以抛出OutOfMemoryException异常。通常,使用异常处理不会处理系统故障。相反,您可以使用AppDomain.UnhandledException等事件并调用Environment.FailFast方法来记录异常信息,并在应用程序终止之前通知用户失败。