如果Python3中存在关联数组,那么检查它的元素是否存在而不仅仅是使用它是否浪费?
你应该:
if 'name' in array and not array['name'].startswith('something'):
或者你应该只是:
if not array['name'].startswith('something'):
...... Python3会“为你”处理它吗?
答案 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'],否则返回空字符串。