你必须检查Python3中是否存在数组元素(不是空字符串)?

时间:2015-08-03 05:51:27

标签: python python-3.x

如果Python3中存在关联数组,那么检查它的元素是否存在而不仅仅是使用它是否浪费?

你应该:

if 'name' in array and not array['name'].startswith('something'):

或者你应该只是:

if not array['name'].startswith('something'):

...... Python3会“为你”处理它吗?

4 个答案:

答案 0 :(得分:2)

你可以做 -

if not array.get('name', 'something').startswith('something'):
如果找不到get()key),

name函数会默认返回第二个值。

因此,在上面的情况下,如果在字典中找不到密钥,则返回something,并且由于.startwith()和not,完整的条件表达式将评估为False,因为它将在OP的第一个例子中做。

答案 1 :(得分:0)

答案实际上取决于array来自哪里。还有你可以做什么检查结果。

例如,如果它来自用户,则是,您肯定应该检查name是否存在,以便您可以使用比some big stacktrace.... KeyError: "name"更好的错误消息进行回复。

如果它是您创建的内部结构,并且没有公开以供用户修改,或者它是否通过API公开,但期望是没有人应该触摸它,那么请不要打扰检查。如果它丢失了,那么它是开发人员应该看到并修复的内部异常。

当然,如果提供或不提供,您可能会非常关心,因为您有合理的后备。然后像Anand的答案中的默认值也是一个很好的解决方案。 array.get('name', some_default)

答案 2 :(得分:0)

Python不会为你处理它。在这两种情况下你都必须做一些工作。尝试编写对你来说有意义的代码,因为你会写一次并多次阅读(并保持它)。

你可以采取两种方式,选择对你最有意义的方式:

obj = array.get('name')
if obj and not obj.startswith('something'):
    pass

在你的第二个选项中,你必须抓住例外:

try:
   if not array['name'].startswith('something'):
        pass
except KeyError:
   print('name does not exist in array')

答案 3 :(得分:-2)

只做...

 if not array.get('name',"").startswith('something')

如果name存在,则返回array ['name'],否则返回空字符串。