我有一个类,其方法要求正确存在某个类字段。该类字段在构造函数中设置,并从配置文件中读取,它可能会也可能不会从该配置文件中获取正确的数据。如果数据不正确,它将在类字段中包含错误的数据,并且类方法将引发异常。
如果发生这种情况,我想要做的是再次运行该方法,但对类构造函数进行不同的调用。这是一个合理处理的东西:catch?catch?因为即使使用正确的类字段,该方法也可能抛出相同的异常。所以我想要的是第一次调用该方法,捕获异常,然后再次运行该方法。但是在第二次运行时,如果抛出异常,我希望它传播。所以:
try:
MyClass().method()
except MyException:
MyClass(True).method()
这有明显的缺陷吗?或者更好的方法是在不使用计数器,标志或其他丑陋的辅助对象的情况下执行此操作?
答案 0 :(得分:3)
我有点惊讶你不希望MyClass
实例留待以后使用,但是,鉴于这是你的意图,你的代码是正确和简洁的 - 它做你做的你想要的状态没有任何“明显的缺陷”。我不确定你认为哪些对象丑陋以及你认为哪些对象很漂亮,但是如果没有引入一些“辅助对象”,我甚至无法想到另一种方法来达到你声明的要求! - )
答案 1 :(得分:1)
你做得很好;如果该方法从异常处理程序中抛出相同的异常,它将被传播而不会被同一个处理程序捕获。
答案 2 :(得分:0)
听起来你在谈论Factory method。我会创建一个单独的Creator类来处理这种情况。