使用try/catch重试相同方法

2 投票
3 回答
593 浏览
提问于 2025-04-16 04:49

我有一个类,这个类里面的方法需要某个字段正确存在。这个字段是在构造函数里设置的,它的值是从一个配置文件读取的,但从这个配置文件里读取的数据可能是对的,也可能是错的。如果数据不对,字段里的值就会错,导致类的方法会抛出一个异常。

如果真的发生了这种情况,我想做的是重新运行这个方法,不过这次用不同的方式调用类的构造函数。这样做合适吗?我在想用try:catch来处理这个问题,因为即使字段正确,方法也可能还是会抛出同样的异常。所以我希望第一次调用这个方法时,如果抛出了异常,就捕获到这个异常,然后再运行一次这个方法。但是如果第二次运行时再抛出异常,我希望这个异常能继续传递出去。也就是说:


try:
    MyClass().method()
except MyException:
    MyClass(True).method()

这样做有没有明显的问题?或者有没有更好的方法来实现这个,而不需要用计数器、标志或者其他复杂的辅助对象?

相关问题:

3 个回答

0

听起来你在说的是一种叫做工厂方法的东西。我会创建一个单独的“创建者”类来处理这种情况。

1

你这样做是没问题的;如果这个方法在处理异常的时候又抛出了同样的异常,这个异常会继续传递下去,而不会被同一个处理程序捕获到。

3

我有点惊讶你不想让这个 MyClass 的实例保留到以后用。不过,既然你是这么想的,你的代码其实是正确且简洁的——它做了你想要的事情,没有什么“明显的缺陷”。我不太清楚你觉得哪些对象不好看,哪些又好看,但如果不引入一些“辅助对象”,我真的想不到其他方法来满足你的要求!-)

撰写回答