如果发生异常,请不要启动对象?

时间:2013-03-21 12:38:57

标签: python python-2.7

如果在__init__中捕获到异常,是否可以阻止python对象的初始化?

示例

class pwm():

    def __init__(self):
        try:
            wiring_pi = cdll.LoadLibrary('/home/lib.so')
        except:
            print "Problem with loading the library:", sys.exc_info()
            #DON'T CREATE THE OBJECT, FOR IT IS USELES WITHOUT lib.so

3 个答案:

答案 0 :(得分:2)

您可以从__init__提出异常,当然。然后调用者将看到异常。严格地说,该对象已被创建,但是当抛出异常时它将被回收,因为没有对它的引用。

在您的示例代码中,要么完全省略except子句,要么从中引发异常。

答案 1 :(得分:2)

覆盖__new__并在那里加载dll。如果失败,请在super().__new__(...)中调用__new__之前提出异常。

答案 2 :(得分:0)

您可以使用静态方法在 init 中捕获异常,然后返回None或其他...

class AesSedai(object):
    def __init__(name="Moiraine"):
        wiring_pi = cdll.LoadLibrary('/home/lib.so')
    @staticmethod
    def create_wizard(cls,*args, **kwargs):
        try:
            wiring_pi = cdll.LoadLibrary('/home/lib.so')
            return cls(*args, **kwargs)
        except:
            print "Problem with loading the library:", sys.exc_info()
            return