Python: вызвать исключение, но не из подфункций - PullRequest
0 голосов
/ 26 мая 2020

Возможно ли в 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")

Я бы хотел бы поймать KeyError, который может вызвать if some_dict["general_value"]:, но вызвать любые KeyErrors изнутри func(...)

Однако в приведенном выше примере будет отображаться 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 из быть пойманным?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Ваш обходной путь - это правильная общая идея, но его можно сделать более аккуратно, например:

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

, что мне кажется более ясным.

0 голосов
/ 26 мая 2020

вы можете использовать вложенную команду try / except, но это не рекомендуется.

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