【问题标题】:Python: Raise exception but not from sub functionsPython:引发异常但不是来自子函数
【发布时间】:2020-05-26 15:40:52
【问题描述】:

在 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,但从 func(...) 中引发任何 KeyErrors

但是,尽管设置了键 general_value,但上面的示例将显示 General value not set

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

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 块中的某些部分被捕获?

【问题讨论】:

  • 您的解决方法是正确的方法。
  • 另一种方法是在func 中捕获KeyError,然后抛出更具体的应用程序定义的异常。

标签: python exception try-catch


【解决方案1】:

您的解决方法是正确的总体思路,但可以更简洁地完成如下:

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")

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

【讨论】:

    【解决方案2】:

    您可以使用嵌套的 try/except - 但不建议这样做。

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

    【讨论】:

      猜你喜欢
      • 2017-05-16
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      相关资源
      最近更新 更多