python 方法的嵌套try/except语句

7gcisfzg  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(164)

我想知道是否有可能处理通过函数调用方法时引发的异常(这是必要的,因为在生产代码中,根据传递的参数创建不同的对象),如以下示例所示。
函数createObj基于不同的标准触发对象Obj_A的创建,并被认为处理Obj_A可能发生的任何异常。

def createObj():
    try:
        return Obj_A()                
    except:
        print("Bad boy!")

Obj_A有一个创建嵌套对象的方法,我希望在其中捕获异常并在createObj级别处理这些异常:

class Obj_A(object):
    def __init__(self):
        pass

    def myFunc(self, var):
        return self.Obj_B(self, var)

    class Obj_B(object):
        def __init__(my, self, var):
            try:
                1/0
            except:
                raise ValueError("Don't divide by zero")

调用createObj可以正常工作,但调用createObj.myFunc('var')会引发ValueError("Don't divide by zero")
当然,在

try:
    createObj().myFunc('var')
except:
    print("Not what I need")

将起作用,但不幸地是,对于这种使用情况来说并不理想。
是否有办法在createObj级别处理此异常并返回Bad boy!

hiz5n14c

hiz5n14c1#

你想用except子句来处理一个异常,这个异常将在相应的try语句之后被引发,这是不可能的,即使可能也是不自然的。
相反,用其他方式做像这个例子。

def createObj():
    def handle_exception(e):
        print("Bad boy!")
    return Obj_A(handle_exception)

class Obj_A(object):
    def __init__(self, handle_exception):
        self.handle_exception = handle_exception

    def myFunc(self, var):
        try:
            return self.Obj_B(self, var)
        except Exception as e:
            self.handle_exception(e)

相关问题