首页 > 解决方案 > 如何在具有相同条件的一个 try/except 块中对单个和循环操作进行分组?

问题描述

我想知道是否有任何方法可以在一个 try/except 块中对以下操作进行分组。我在这两种情况下都使用相同的异常。我试图缩短这段代码,但我没有想到任何好的东西。这是示例代码:

def cast_values(values):
    try:
        values['Price'] = float(values['Price'])
    except KeyError:
        pass

    for field in ('Pages', 'Quantity', 'Discount'):
        try:
            values[field] = int(values[field])
        except KeyError:
            pass

我希望检查所有键,不管发生多少异常。

标签: pythonexceptiontry-except

解决方案


您可以通过分解密钥与特定类型的配对来概括您的代码。try在那里,您可以使用包含所有键/类型对的单个语句的单个循环。

def cast_values(values):
    type_map = {
        'Price': float,
        'Pages': int,
        'Quantity': int,
        'Discount': int,
    }

    for key, type_ in type_map.items():
        type_ = types.get(key, int)
        try:
            values[key] = type_(values[key])
        except KeyError:
            pass

在这种情况下,我可能会完全摆脱该try语句,并简单地检查密钥是否在values

for key, type_ in type_map.items():
    if key not in values:
        continue
    values[key] = type_(values[key])

推荐阅读