当list.dict中没有re.search项时,如何抛出异常

时间:2016-03-13 08:56:31

标签: python

我正在阅读文件并将内容放入字典中。我正在编写一种搜索密钥并返回其值的方法。如果我的密钥不在字典中,我该如何抛出异常。例如,下面是我测试的代码,但是对于非匹配项,我得到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")

实测值 找不到

3 个答案:

答案 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"