如何有错误但继续在python中的脚本?

时间:2009-10-06 08:07:41

标签: python

假设我在Python中有这个代码:

l = dict['link']
t = dict['title']        <<<<<<<<error here, there is no "title"
d = dict['description']
k = dict['keyword']

如果第2行出现错误怎么办,但我希望它继续运行脚本并分配其他值?我可以“忽略”错误吗?

编辑:我知道如何做一个简单的尝试,除了。但是,通常情况下,当#2出现错误时,它会向#除外,然后不继续其余的代码。'

编辑:我知道有一种“获取”方法。但是,我想要一般的方式来做...我不会一直使用字典。

7 个答案:

答案 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')