![]() |
1
2
我认为您正在尝试在异常详细信息中包含递归路径,以帮助调试。 试试这个怎么样?
如果使用线程等,则可能需要查看线程本地存储中的存储路径。 如果您不希望强制调用者处理递归异常,您可以将__路径__设为公用,以便调用者可以访问它。(正如埃里克·利珀特后来的回答) 或者,您可以在捕获异常时记录错误日志系统的路径,然后重新抛出异常。
这样做的好处是,调用者根本不需要知道__路径_。 归根结底,这都取决于您的调用者需要什么,不知何故,我认为您是这段代码的调用者,所以我们没有必要再去猜测这一级别的交易需要什么。 |
![]() |
2
5
只是简化(稍微)异常处理:
如果这对你有任何用处的话,你会得到调用堆栈信息,除此之外,你可以把它写成一个片段,然后把它插入到你需要的地方,以便重新可用。 还有以下可能性,可能会很慢,但会起作用:
|
![]() |
3
4
将catch处理程序从递归函数中拉出,然后在不减少处理的情况下编写递归,怎么样?
|
![]() |
4
4
您的问题在异常处理中。在自己的异常中包装一个异常通常是一个坏主意,因为它给代码调用方增加了处理异常的负担。如果调用方怀疑它们可能会通过调用代码导致“找不到路径”异常,则无法将其调用包装在捕获IOException的try catch中。他们必须捕获递归异常,然后编写一组代码来询问它,以确定它实际上是什么类型的异常。有时这种模式是合理的,但我不认为这是其中之一。 问题是,这里根本不需要使用异常处理。以下是解决方案的一些理想方面:
好的,太好了,如果这些是设计目标,那么就实现:
现在来电者可以处理:
你看到我们在这里做什么了吗?我们利用了这样一个事实:异常会阻止递归算法的运行。我们要做的最后一件事是通过最后一次突然出现来清理道路;我们 希望 在一个例外情况下,Pops会丢失! 有道理? |
![]() |
5
0
这样,您只处理一次,如果一个异常引发递归2处理它,则递归将中止。 |
|
M.Jane · 组织和编写异常类的正确方法 6 年前 |
![]() |
shubham daharwal · java中的内部捕获异常 6 年前 |
![]() |
Jon · 如何在不需要任何操作的情况下处理Python异常 6 年前 |
![]() |
felix1415 · C++捕获(标准::异常和e)与捕获(…) 6 年前 |
![]() |
k0pernikus · 如何在scala中键入可能引发异常的函数? 7 年前 |