如果在__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
答案 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