首页 > 解决方案 > 在 Python 中的 try 子句中继续,即使引发了异常

问题描述

即使引发异常,是否有任何方法可以在 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可能存在。safe_zone即使调用outer_margin引发异常,我也想达到。有没有办法在一个 try/except 块中做到这一点?就像是:

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

我已经在示例中找到了针对该案例的不同解决方案,但现在我很想知道是否有办法继续执行一个 try/except 块,即使引发异常也是如此。

标签: pythontry-catch

解决方案


您可以使用dict.get而不是捕获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)

推荐阅读