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,但上面的示例将显示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块中的某些部分不被捕获?

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

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

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

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

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

最新更新