如何调用ob1.fun1.fun2并将ob1.fun1处理为none?

时间:2016-10-04 00:56:57

标签: python

我尝试使用以下代码,但看起来很难看

tmp = ob1.fun1
result = None
if tmp is not None:
   global result
   result = tmp.fun2

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

如果您希望result None ob1.fun1 Nonefun2作为属性不存在,那么您可以使用getattr并使用None作为默认值。请注意,getattr(None, 'attr', something)将返回something

result = getattr(ob1.fun1, 'fun2', None)

答案 1 :(得分:0)

使用EAFP(更容易请求宽恕而非许可)方法。在try / except中包装它并相应地处理您的异常:

result = None
try: 
    result = ob1.fun1.fun2
except AttributeError:
    # do your exception handling here

您还可以使用hasattr检查fun1中是否有ob1

result = None
if hasattr(ob1, 'fun1'):
    res = ob1.fun1.fun2
else:
    print('no fun1 found in ob1')
    # or raise an Exception

答案 2 :(得分:0)

怎么样:

if t.fun1 is not None:
  result = t.fun1.fun2
else:
  result = None