例如,在构造函数中,我需要获取一些可能失败的资源,在这种情况下,该类不应该被实例化。
我应该在构造函数中抛出异常吗?
class Foo(object):
def __init__(self):
self.rsc = get_resource():
assert self.rsc
并尝试在实例化代码中捕获它?
try:
a = Foo()
except:
a = None
然后,代码检查a是否为None。
答案 0 :(得分:3)
将我之前的评论扩展为答案:
最好将资源添加为构造函数参数,如下所示:
class Foo(object):
def __init__(self, rsc):
self.rsc = rsc
这种方法有很多好处:
如果您喜欢隐式获取资源的界面,那么很容易将其包装起来。像make_foo
这样的简单函数会尝试自动获取资源,如果不能,则返回None(如果您愿意,则返回错误):
def make_foo():
rsc = get_resource()
if rsc:
return Foo(rsc)
else:
return None
答案 1 :(得分:-3)
不是真正的问题,只需在try...except
函数中添加init
,并在发生故障时指定None
之类的特定值,或添加其他功能
class Foo(object):
def __init__(self):
try:
self.rsc = get_resource()
self.success = True
except:
self.rsc = None
self.success = False
a = Foo()
if a.success:
print(a.rsc)
else:
do_something_else()