我正在阅读文件并将内容放入字典中。我正在编写一种搜索密钥并返回其值的方法。如果我的密钥不在字典中,我该如何抛出异常。例如,下面是我测试的代码,但是对于非匹配项,我得到re.search的输出为None。 我可以使用has_key()方法吗?
mylist = {'fruit':'apple','vegi':'carrot'}
for key,value in mylist.items():
found = re.search('vegi',key)
if found is None:
print("Not found")
else:
print("Found")
实测值 找不到
答案 0 :(得分:3)
Python趋向于“更容易请求宽恕而不是权限”模式与“先看你跳跃”。所以在你的代码中,不要在尝试拉取它的值之前搜索键,只需拉取它的值并根据需要处理余量(以及需要的地方)。
*假设您正在询问如何找到一个键,并返回它的值。
EAFP方法:
def some_func(key)
my_dict = {'fruit':'apple', 'vegi':'carrot'}
return my_dict[key] # Raises KeyError if key is not in my_dict
如果你需要做一个LBYP,试试这个:
def some_func(key):
my_dict = {'fruit':'apple', 'vegi':'carrot'}
if not key in my_dict:
raise SomeException('my useful exceptions message')
else:
return my_dict[key]
LBYP方法的最大问题是它引入了竞争条件;检查它之间可能存在或不存在“密钥”,然后返回它的值(这只有在进行当前工作时才可能)。
答案 1 :(得分:0)
您只需使用'in'。
mylist = {'fruit':'apple','vegi':'carrot'}
test = ['fruit', 'vegi', 'veg']
for value in test:
if value in mylist:
print(value + ' is in the dict, its value : ' + mylist[value])
else:
raise Exception(value + ' not in dict.')
# Console
# fruit is in the dict, its value: apple
# vegi is in the dict, its value: carrot
# Exception: veg is not in dict
答案 2 :(得分:0)
@JRazor为你提供了几种使用列表理解,lambda和filter来实现你所谓的“has_key()方法”的方法(当我将它们复制/粘贴到python 2.7解释器时,我得到SyntaxError
s? )
以下是您问题的字面答案:“如果字典中没有我的密钥,如何抛出异常?”
许多语言称为throw
(例外),python调用raise
(例外)。
关于here的更多信息。
在您的情况下,您可以添加如下自定义异常:
mylist = {'fruit':'apple','vegi':'carrot'} # mylist is a dictionary. Just sayin'
if "key" not in mylist:
raise Exception("Key not found")
else:
print "Key found"