如何捕获 - 'NoneType'对象没有属性'something'

时间:2015-03-17 19:00:24

标签: python

我知道错误是什么:

AttributeError: 'NoneType' object has no attribute 'something'

意味着,但我无法弄清楚的是如何抓住它。基本上我想检查我的对象是否已创建。

我想做这样的事情:

try:
    test = self.myObject.values()
except:
    print "Error happened"

但每次我都这样做:

AttributeError: 'NoneType' object has no attribute 'values'

有人能告诉我怎么抓住这个吗?

2 个答案:

答案 0 :(得分:5)

您可以使用返回True或False的hasattr(object,name)方法。如果您尝试访问不存在的属性,您将始终收到异常。 https://docs.python.org/2/library/functions.html#hasattr

如果你仍想捕获异常,那么只需执行一个异常类型为'AttributeError'的try / catch块

答案 1 :(得分:1)

有很多方法可以做到这一点。如果您只想查看对象是否存在,您可以执行以下操作:

if self.myObject:
    # do stuff with my object
else:
    # do other stuff

#Or the more explicit form, if myObject could be 'falsey' normally, like an empty list/dict
if self.myObject is not None:

如果你可以指定一个合理的默认值,你可以像这样单行排列

test = self.myObject.something if self.myObject else default_value

default_value是您可以作为合理默认值使用的任何内容。感谢python的short circuit evaluation,这是安全的,因为如果self.myObject.somethingself.myObject(或假名),None永远不会被评估。