首页 > 解决方案 > Python:引发异常但不是来自子函数

问题描述

在 Python 中是否可以在当前函数级别捕获异常,但不能从被调用的子函数中捕获异常?

请考虑这个例子:

def func(some_dict):
    print(some_dict["special_value"])

some_dict = {
    "general_value": True,
    # "special_value": True
}

try:
    if some_dict["general_value"]:
        func(some_dict)
except KeyError:
    print("General value not set")

我想捕捉if some_dict["general_value"]:可能抛出的 KeyError,但从内部引发任何 KeyErrorfunc(...)

但是,上面的示例将显示General value not set虽然设置了密钥general_value

我可以想到以下解决方法,但我想知道是否有更好的方法

temp_value = None

try:
    temp_value = some_dict["general_value"]
except KeyError:
    print("General value not set")

if temp_value: 
    func(some_dict)

问这个问题的另一种方式:是否可以排除try/except块中的某些部分被捕获?

标签: pythonexceptiontry-catch

解决方案


您的解决方法是正确的总体思路,但可以更巧妙地完成:

try:
    some_dict["general_value"]
except KeyError:
    print("General value not set")
else:
    func(some_dict)

也许:

if "general_value" in some_dict:
    func(some_dict)
else:
    print("General value not set")

这对我来说似乎更清楚一些。


推荐阅读