更短的尝试除了许多变量的块

时间:2015-03-10 03:18:52

标签: python syntax try-catch

我正在解析不同网址中的一些内容。并非所有网址都具有相同的结构,因此某些网址的代码失败,因此我提出的代码就是这个(简化版):

    meta_dict = {}
    try:
        meta_dict['date_published'] = html.find('date'}).text
    except:
        meta_dict['date_published'] = ''
    try:
        meta_dict['headline'] = html.find('headline').text
    except:
        meta_dict['headline']
    try:
        meta_dict['description'] = html.find('description').text
    except:
        meta_dict['description']

    return meta_dict

这是一个简化的块,但我们的想法是尝试获取超过50个变量,并为每个变量执行try except块,在代码中也感觉过于重复和丑陋。

我知道我可以为它创建一个函数,如果失败则返回'',但我想知道是否有另一种方法来处理这种情况。

2 个答案:

答案 0 :(得分:2)

l = [('date_published', 'date'), ('headline', 'headline'), ('description', 'description')]
for dict_val, html_val in l:
    try:
        meta_dict[dict_val] = html.find(html_val).text
    except:
        meta_dict[dict_val] = ''

答案 1 :(得分:1)

如果您检查的这些变量的列表是常量,您可以将它们放入列表中,然后迭代该列表。

vars = [date_publis, hedheadline, description, . . . ]

for var in vars:
    try:
        meta_dict[var] = html.find(var}).text
    except:
        meta_dict[var] = ''