在Python中的try子句中继续,即使引发了异常

2024-04-20 07:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在try子句中是否有任何方法可以继续执行代码,即使在引发异常时也是如此?你知道吗

这是代码示例。你知道吗

outer_margin = 0.125  # Default Amazon
safe_zone = 0.25  # Default Amazon
safe_spine = 0.0625  # Default Amazon
if custom_measure is not None:
    if isinstance(custom_measure, dict):
        try:
            outer_margin = custom_measure["outer_margin"]
            safe_zone = custom_measure["safe_zone"]
            safe_spine = custom_measure["safe_spine"]
        except KeyError as e:
            logger.warning("Key {} not found, default value used.".format(e))

这三个值都是可选的,因此键outer_margin可能不存在,但safe_zone可能存在。即使调用outer_margin引发异常,我也希望访问safe_zone。有没有什么方法可以在一个试块中完成?比如:

# Not valid syntax
try:
    outer_margin = custom_measure["outer_margin"]
try:
    safe_zone = custom_measure["safe_zone"]
except KeyError as e:
    pass

在这个例子中,我已经找到了一个不同的解决方案,但是现在我很想知道是否有一种方法可以继续执行一个try/except块,即使引发了异常。你知道吗


Tags: 方法代码margindefaultzoneamazonifcustom
2条回答

您可以使用^{}而不是捕获KeyError异常。你知道吗

if isinstance(custom_measure, dict):
    outer_margin = custom_measure.get("outer_margin")
    safe_zone = custom_measure.get("safe_zone")
    safe_spine = custom_measure.get("safe_spine")

如果"outer_margin"custom_measure中不存在,它将被设置为None。你知道吗

您还可以像这样设置另一个默认值而不是None。你知道吗

outer_margin = custom_measure.get("outer_margin", 0)

如果确实需要日志,请重构try/except

def get_with_warning(data, key, default):
    if key in data:
        return data[key]
    else:
        logger.warning("Key {} not found, default value used.".format(key))
        return default

outer_margin = get_with_warning(custom_measure, "outer_margin", 0.125)
safe_zone = get_with_warning(custom_measure, "safe_zone", 0.25)
safe_spine = get_with_warning(custom_measure, "safe_spine", 0.0625)

如果没有,那么就这么简单:

outer_margin = custom_measure.get("outer_margin", 0.125)
safe_zone = custom_measure.get("safe_zone", 0.25)
safe_spine = custom_measure.get("safe_spine", 0.0625)

相关问题 更多 >