Oop 是否有适当的方法来处理多个错误/异常?

Oop 是否有适当的方法来处理多个错误/异常?,oop,exception,exception-handling,Oop,Exception,Exception Handling,在OO编程中,是否有一些关于处理多个错误的概念模式、想法 例如,我有一个方法可以执行一些检查,并且应该为发现的每个错误返回一条错误消息 [“名称太短”,“名称包含无效的unicode序列”,“名称太长”] 现在,我应该使用异常数组(而不是抛出的异常)吗 或者像这样更好: class MyExceptionList extends Exception{ public Void addException(Exception e){} public Array getExceptions(){

在OO编程中,是否有一些关于处理多个错误的概念模式、想法

例如,我有一个方法可以执行一些检查,并且应该为发现的每个错误返回一条错误消息

[“名称太短”,“名称包含无效的unicode序列”,“名称太长”]

现在,我应该使用异常数组(而不是抛出的异常)吗

或者像这样更好:

class MyExceptionList extends Exception{
  public Void addException(Exception e){}
  public Array getExceptions(){}
}
任何支持这一论点的理论都将受到赞赏

(这不是关于特定编程语言的请求,而是纯理论性的请求)


提前谢谢你

那么你就不应该抛出异常了

异常
用于异常情况。验证方法中发现的错误不被视为“异常”,很明显,验证错误会发生

一种异常情况是,例如,当您尝试连接到数据库失败时


您应该将所有验证错误记录到一个数组中,然后根据需要对其进行格式化和显示。

异常并非用于验证,而是在执行过程中发生与预期不同的情况时创建的。这就是为什么不能一次创建多个异常,但异常可能是因为发生了其他异常而导致的,这就是为什么它们可以有一个名为case的父异常。

根据我多年的经验,处理错误最好是在所有级别记录错误,并从函数返回true/false,表示成功/失败

日志记录取决于实现。它可以是一个文件,一个内存,你可以记录消息,唯一的数字,无论什么,只要日志能够让你精确地定位错误的确切位置

我有时会使用异常,在我执行许多操作的情况下,每个操作都取决于它的前一个操作的成功与否。这使得代码更干净,没有用于错误检查的
if
s。然而,这并不是最重要的。主要是记录错误,并返回success/fail。需要成功/失败,以便您可以决定是否以正常方式继续(例如不执行非预期操作,因为读取大小可能会溢出内存)

还有两个更重要的注意事项:

1) 您必须构建一个超级简单的API来报告(记录)您的消息,否则您会发现自己推迟了这一关键的事情,最终不会这样做

2) 日志或报告必须易于查看,并在出现问题时通知您。否则,您可能会发现自己根本没有使用错误报告机制


这对我来说是一个非常重要的课题,我相信这是软件工程中最重要的问题之一。在我的

< P>中,你可以阅读更多关于它的不幸的是,很多语言和框架(包括C++、java和.NET)使用一个异常处理机制,它需要一个异常对象的类型来同时回答许多问题,包括:

  • 发生了什么事
  • 除堆栈展开外,还需要采取哪些措施
  • 在什么情况下系统应被视为处于“已知”状态,至少在例外情况所指示的问题方面。 不幸的是,虽然这些问题的答案有些关联,但实际上它们还远远没有100%的关联。不幸的是,假设例外类型足以回答所有这些问题,这使得很难理智地处理许多情况

    如果您可以控制所有可以抛出的异常,如果异常处理对象包括一个虚拟的
    IsResolved
    属性或方法,以及一个
    ShouldCatchAs
    属性或方法,如果异常需要作为
    T
    处理,则使用异常处理范例可能会有所帮助。这样的范例将能够顺利地处理异常发生的情况,同时从早期异常中展开堆栈(现有异常和新异常将被包装到一个复合异常对象中,其
    ShouldCatchAs
    属性将合并原始异常的属性,并且其
    IsResolved
    属性仅在两个原始异常的
    IsResolved
    属性同样执行时返回
    true


    我不知道如何将这种行为集成到现有的框架中,除非捕获并包装所有不符合范例的异常,但也许未来的框架可以促进这种事情。

    嗨,谢谢你的回答。那么我应该如何用同一方法处理多个错误?@topeerornotopeer:
    你应该记录所有的异常将错误复制到数组中,然后格式化并按您喜欢的方式显示。
    这怎么不清楚?哈哈哈,很抱歉我完全错过了。好的。