0

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

例子

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
4

3 回答 3

2

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

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

于 2013-03-21T12:44:18.200 回答
2

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

于 2013-03-21T12:45:54.553 回答
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 
于 2013-03-21T13:29:24.860 回答