假设我在Python中有这个代码:
l = dict['link']
t = dict['title'] <<<<<<<<error here, there is no "title"
d = dict['description']
k = dict['keyword']
如果第2行出现错误怎么办,但我希望它继续运行脚本并分配其他值?我可以“忽略”错误吗?
编辑:我知道如何做一个简单的尝试,除了。但是,通常情况下,当#2出现错误时,它会向#除外,然后不继续其余的代码。' 编辑:我知道有一种“获取”方法。但是,我想要一般的方式来做...我不会一直使用字典。答案 0 :(得分:12)
最简单的选择是使用.get()
:
l = dict.get('link')
t = dict.get('title')
d = dict.get('description')
k = dict.get('keyword')
t
变量将包含None
(例如,如果您想要一个空字符串,则可以使用dict.get('title', '')
)。另一种选择是捕获KeyError
例外。
答案 1 :(得分:8)
t = dic.get('title')
不会产生错误。它相当于:
try:
t = dic['title']
except KeyError:
t = None
请不要内置阴影,不要将dict
用于变量名称。使用其他东西。
答案 2 :(得分:3)
如果你想要一种消耗异常并继续的方法(虽然这可能不是一个好主意)你可以使用包装函数,如:
def consume_exception(func, args, exception):
try:
return func(*args)
except exception:
return None
或类似的东西。
然后致电
l = consume_exception(dict.__getitem__, ['link'], KeyError)
t = consume_exception(dict.__getitem__, ['title'], KeyError)
...
答案 3 :(得分:1)
在这种情况下,最好的办法是使用
l = dict.get('link', 'default')
t = dict.get('title', 'default')
等
字典中没有的任何值都将设置为'default'
(或您选择的任何值)。当然,你以后必须处理这个......
答案 4 :(得分:0)
有没有听说过Try Catch和异常处理?您可以阅读here
但是,你应该避免故意造成错误,为什么你知道的代码会失败?
答案 5 :(得分:0)
尝试/除/终于;请参阅tutorial
然而,主要问题是;为什么要首先将这些变量分配给变量而不是访问字典?
答案 6 :(得分:0)
使用例外
try:
l = dict['link']
t = dict['title']
d = dict['description']
k = dict['keyword']
except (RuntimeError, TypeError, NameError):
print ('something')