【问题标题】:Exception handling of subprogram calling subprogram子程序调用子程序的异常处理
【发布时间】:2015-01-22 09:17:50
【问题描述】:

我有一个方法,它有一个再次调用子程序的子程序。最后一个子程序可以抛出异常。谁负责捕获异常?或者谁能​​捕捉到异常?

那么异常是否在调用堆栈中传递,直到方法捕获它们?还是只有调用方法负责捕捉子程序的异常?

【问题讨论】:

    标签: c# exception-handling


    【解决方案1】:

    全部 3 个

    每个程序都应该处理自己的错误,然后如果任何程序依赖于另一个程序,它们应该确保它们不会因为该依赖项中发生的错误而崩溃。

    可以说,最重要的是程序处理自己的错误,因为它也可以在其他程序中使用。


    你的 main 方法不需要担心导致最终程序崩溃的原因(“sub sub method”),它只需要知道 sub 方法崩溃的原因。如果它出于某种原因确实 很重要,那么最终程序崩溃的原因可能与您开始时传入的参数不同。最终程序会说因为X而崩溃,中间程序要注意这一点,发现是因为第一个程序的参数Y,只报告给第一个程序(根据需要)。

    您需要避免在最终程序和第一个程序之间创建依赖关系,因为这将导致最终程序更新时维护的噩梦。

    【讨论】:

    • 我的main方法能捕捉到sub sub方法的异常吗?
    • 它不应该,你描述的子方法应该已经处理了它,你只需要担心你自己的直接依赖关系,以及它们在你自己的程序中的交互(“照顾#1 ")
    • 如何获取 main 方法异常的原因?一直重新抛出它还是在内部异常中使用?但是,如果您在层次结构中有三个步骤怎么办?应该如何管理?
    • @grabner - 很难给出一个具体的答案,但你的最终程序应该告诉第二个程序它崩溃的原因,然后根据这些信息,第二个程序需要告诉第一个程序什么发生了。这可能最终是相同的消息,但并非总是如此。您只需要关注您的直接依赖项
    • @grabner - 如果这是描述您需要的信息的最佳方式,那么可以,但最重要的是,请确保您只对中间程序的响应感兴趣,而不是最终的响应(这可能是相同的响应)。
    最近更新 更多