基本上这是从我在尝试查找索引中是否存在索引时遇到的问题开始的:
if collection[ key ]: # if exist
#do this
else: # if no exist
#do this
但是当索引确实不存在时,它会抛出一个KeyError。 所以,阅读Python文档。如果缺少()已定义,则不会抛出 KeyError 。
collection = {}
def collection.__missing__():
return false
终端上面的代码告诉我:
ghelo@ghelo-Ubuntu:~/Music$ python __arrange__.py
File "__arrange__.py", line 16
def allArts.__missing__():
^
SyntaxError: invalid syntax
那么,如何正确地做到这一点? 顺便说一下,我需要在这上面使用Python 2.7。在Python 3上运行时有区别吗?
答案 0 :(得分:6)
您就是这样做的:
if key in collection:
或者,正如@sdolan所建议的那样,您可以使用.get
方法,如果它不存在,则会返回默认值(可选的第二个参数)。
if collection.get(key, None):
如果你想使用__missing__
,你可以将它应用于扩展dict的类(在这种情况下):
class collection(dict):
def __missing__(self, key):
print "Too bad, {key} does not exist".format(key=key)
return None
d = collection()
d[1] = 'one'
print d[1]
if d[2]:
print "Found it"
<强>输出强>
one
Too bad, 2 does not exist
答案 1 :(得分:0)
您可以通过使用try..except处理KeyError异常来检查密钥是否存在,如下所示。
try:
collection[key]
# do this
except KeyError:
# do that
这种编码风格称为EAFP
,意思是“更容易请求宽恕而非许可”http://docs.python.org/glossary.html#term-eafp
另一种方法是使用get
方法,如果找不到密钥,默认情况下会返回
if collection.get(key) is not None:
# do this
else:
# do that
答案 2 :(得分:0)
已经有几个答案显示了您在实际情况下应该做的事情,但缺失也可以做您所问过的事情。
如果你想使用它,你需要继承dict。
class mydict(dict):
def __missing__(self, key):
return 'go fish'
然后你可以创建一个:
d = mydict()
并使用
访问它d[0]
=> 'go fish'
d[0] = 1
d[0]
=> 1
答案 3 :(得分:0)
您可以使用if selection.has_key(keylookingfor)。