Python:防止Python索引数组。列表索引必须是整数

Python:防止Python索引数组。列表索引必须是整数,python,Python,到目前为止,我一直在努力研究这个问题,但运气不佳。我是python新手,所以我很抱歉,我相信有一个简单的解决方案 local obj = { 'button1': [100, 750], 'button2': { 'loc': [100, 1750], 'returns': 2 } } 我希望一些对象有一个额外的属性“returns”。如果我以编程方式循环对象,如果我想访问它,我必须检查“loc”数组是否存在 if obj[elemen

到目前为止,我一直在努力研究这个问题,但运气不佳。我是python新手,所以我很抱歉,我相信有一个简单的解决方案

local obj = {
    'button1': [100, 750],
    'button2': {
        'loc': [100, 1750],
        'returns': 2
     }
}
我希望一些对象有一个额外的属性“returns”。如果我以编程方式循环对象,如果我想访问它,我必须检查“loc”数组是否存在

if obj[element]['loc'] is not None:
   # get array w obj[element]['loc']
else:
   # get array w obj[element]
问题是我得到了一个错误:

# list indices must be integers
TypeError: list indices must be integers, not str
我理解为什么,这是因为'button1'是一个数组,所以python开始查找索引操作,但找到的是字符串而不是int。但是,我需要这个括号来搜索下一个对象上的['loc']属性。我还知道,在python中不能使用“.”运算符对属性进行索引,所以我也不能这样做

如果属性不尝试索引上一个对象的数组,如何检查属性是否存在。

if isinstance(obj[element], dict) and 'loc' in obj[element]:
或者,您可以使用
试试
except
捕获异常:

try:
    # do something with obj[element]['loc']
except TypeError:
    pass
您可以在下面尝试:

if type(obj[element]) is dict and obj[element]['loc'] is not None:

为什么不让按钮1成为
{'loc':[100750],'returns':None}
?一致性ftw。您可能可以使用
尝试进行检查。。。catch
,通过尝试按索引获取属性,如果属性损坏,那么您知道它一定是另一种同意的、优秀的建议!我一定会走那条路。还是没有办法克服这个问题吗?太棒了,谢谢!让我尽快接受答案。