Python (Try;Except) Как выделить несколько вариантов одной ошибки?

У меня есть несколько вариантов ошибки ApiError. Пример:

  1. vk_api.exceptions.ApiError: [5] User authorization failed: invalid access_token (4).
  2. vk_api.exceptions.ApiError: [9] Flood control: too much captcha requests

Можно ли как-нибудь различить их в except? Чтобы при разных ошибках выполнялись разные действия?

Пример Кода:

except vk_api.exceptions.ApiError as error_msg: (Тут нужна первая ошибка)
       print(error_msg)
       (Какое-нибудь действие)
except vk_api.exceptions.ApiError as error_msg: (Тут вторая ошибка)
       print(error_msg)
       (Какое-нибудь действие)

Надеюсь понятно описал проблему.


Ответы (1 шт):

Автор решения: Alpensin

У ApiError есть поле code. Соответственно можно использовать if

except vk_api.exceptions.ApiError as error_msg:
    if error_msg.code == 5:
        ...
    if error_msg.code == 9:
        ...

Или создать словарь с функциями. Ключем будет код ошибки, а значением функция, выполняющая нужную обработку ошибки

def handle_foo(error_msg):
    '''Делаю что-то с ошибкой'''


def handle_bar(error_msg):
    '''Делаю что-то другое с ошибкой'''


API_ERROR_HANDLERS = {5: handle_foo, 9: handle_bar}
...
except vk_api.exceptions.ApiError as error_msg:
    error_handler = API_ERROR_HANDLERS[error_msg.code]
    error_handler(error_msg)
→ Ссылка