Python vk api обработка ошибок

Исключения¶

authors

python273

license

Apache License, Version 2.0, see LICENSE file

copyright
  1. 2019 python273

exception vk_api.exceptions.VkApiError[source]

Bases: Exception

exception vk_api.exceptions.AccessDenied[source]

Bases: vk_api.exceptions.VkApiError

exception vk_api.exceptions.AuthError[source]

Bases: vk_api.exceptions.VkApiError

exception vk_api.exceptions.LoginRequired[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.PasswordRequired[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.BadPassword[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.AccountBlocked[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.TwoFactorError[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.SecurityCheck(phone_prefix=None, phone_postfix=None, response=None)[source]

Bases: vk_api.exceptions.AuthError

exception vk_api.exceptions.ApiError(vk, method, values, raw, error)[source]

Bases: vk_api.exceptions.VkApiError

try_method()[source]

Отправить запрос заново

exception vk_api.exceptions.ApiHttpError(vk, method, values, raw, response)[source]

Bases: vk_api.exceptions.VkApiError

try_method()[source]

Отправить запрос заново

exception vk_api.exceptions.Captcha(vk, captcha_sid, func, args=None, kwargs=None, url=None)[source]

Bases: vk_api.exceptions.VkApiError

get_url()[source]

Получить ссылку на изображение капчи

get_image()[source]

Получить изображение капчи (jpg)

try_again(key=None)[source]

Отправить запрос заново с ответом капчи

Parameters

key – ответ капчи

exception vk_api.exceptions.VkAudioException[source]

Bases: Exception

exception vk_api.exceptions.VkAudioUrlDecodeError[source]

Bases: vk_api.exceptions.VkAudioException

exception vk_api.exceptions.VkToolsException(*args, response=None)[source]

Bases: vk_api.exceptions.VkApiError

exception vk_api.exceptions.VkRequestsPoolException(error, *args, **kwargs)[source]

Bases: Exception

VK Requests является библиотекой Python для взаимодействия с API ВКонтакте. Одной из задач при использовании этой библиотеки является обработка ошибок.

При работе с VK Requests возможны такие типы ошибок, как:

— Ошибка авторизации
— Ошибка доступа к методу
— Ошибка сервера
— Ошибка соединения
— Ошибка валидации параметров запроса

Обработка ошибок в VK Requests осуществляется с помощью обработчиков ошибок. Для каждого типа ошибок можно определить свой обработчик, который будет вызван при возникновении ошибки. Обработчики ошибок позволяют программисту контролировать ход выполнения программы и избежать непредвиденных ошибок.

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

Пример обработчика ошибок для VK Requests:

import vk_requests.exceptions

def handle_vk_error(error):
    if isinstance(error, vk_requests.exceptions.ApiError):
        # Обработка ошибки API VK
        print(f"Ошибка API VK: {error}")
    elif isinstance(error, vk_requests.exceptions.AccessDenied):
        # Обработка ошибки доступа
        print(f"Ошибка доступа: {error}")
    elif isinstance(error, vk_requests.exceptions.ResponseFormatError):
        # Обработка ошибки формата ответа
        print(f"Ошибка формата ответа: {error}")
    else:
        # Обработка других ошибок
        print(f"Неизвестная ошибка: {error}")

# Использование обработчика ошибок
try:
    # Код, который вызывает ошибку
except vk_requests.exceptions.ApiError as e:
    handle_vk_error(e)
except vk_requests.exceptions.AccessDenied as e:
    handle_vk_error(e)
except vk_requests.exceptions.ResponseFormatError as e:
    handle_vk_error(e)
except Exception as e:
    handle_vk_error(e)

В данном примере обработчик ошибок для VK Requests является функцией handle_vk_error, которая принимает ошибку в качестве аргумента. В данном случае обработчик различает три типа ошибок: ошибку API ВК, ошибку доступа и ошибку формата ответа. Если ошибка не относится к этим типам, обработчик печатает сообщение о неизвестной ошибке.

Обработка ошибок в VK Requests также может быть настроена глобально для всего приложения. Для этого в модуле vk_requests.settings можно задать обработчики ошибок по умолчанию.

import vk_requests.settings

def handle_vk_error(error):
    # Обработка ошибок

vk_requests.settings.ERROR_HANDLERS = {
    vk_requests.exceptions.ApiError: handle_vk_error,
    vk_requests.exceptions.AccessDenied: handle_vk_error,
    vk_requests.exceptions.ResponseFormatError: handle_vk_error,
}

В данном примере мы задаем обработчики ошибок по умолчанию, используя глобальные настройки. При возникновении ошибки выбирается соответствующий обработчик в зависимости от типа ошибки.

В заключение следует отметить, что обработка ошибок в VK Requests является неотъемлемой частью разработки приложений, которые используют API ВКонтакте. Важно правильно обрабатывать ошибки, чтобы приложение не прервало свою работу в случае неожиданных ситуаций и не вывело непонятную или даже пугающую информацию для пользователя. Важно, чтобы приложение корректно сообщало об ошибках и предлагало пользователю альтернативные варианты действий, если таковые имеются.

У меня есть несколько вариантов ошибки 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)
       (Какое-нибудь действие)

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

задан 18 июл 2022 в 17:29

DadMaster's user avatar

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

ответ дан 18 июл 2022 в 17:53

Alpensin's user avatar

AlpensinAlpensin

3,07110 серебряных знаков18 бронзовых знаков

Здравствуйте. Собственно в заголовке отражается суть вопроса. Есть функция

def wall_post(message, vkapi, user_id):
    try:
        vkapi.wall.post(owner_id=user_id, message=message)
        print("Сообщение '" + message + "' успешно отправлено на стену пользователя " + user_id)
    except Exception as e:
        print(str(e))
        sleep(10)
        vkapi.wall.post(owner_id=user_id, message=message)

В определенный момент выскакивает исключение про то что нужно ввести капчу. Как мне обрабатывать именно это исключение? Т.е. как к примеру

except ZeroDivisionError: …

Сам текст исключения:

14. Captcha needed. params = [{‘key’: ‘oauth’, ‘value’: ‘1’}, {‘key’: ‘method’, ‘value’: ‘wall.post’}, {‘key’: ‘access_token’, ‘value’: ‘b7359cbb3e7f8285d1c75acafc6168a4ccf600d2fb1419a859ef05362b2c59bf339608668de58496bc940’}, {‘key’: ‘timestamp’, ‘value’: ‘1402169419’}, {‘key’: ‘owner_id’, ‘value’: ‘115809454’}, {‘key’: ‘v’, ‘value’: ‘5.20’}, {‘key’: ‘message’, ‘value’: ‘f’}]

Vk_api предоставляет удобный способ создания ботов для социальной сети ВКонтакте. Однако, при работе с API могут возникать ошибки, которые необходимо обрабатывать правильно для корректной работы бота. В этой статье мы рассмотрим лучшие практики обработки ошибок при создании бота на Vk_api.

Обработка ошибок функции API

Первая и наиболее распространённая ошибка — ApiError, возникающая при вызове функций API. Для обработки этой ошибки можно использовать конструкцию try-except:

import vk_api

vk_session = vk_api.VkApi(token='TOKEN')
vk = vk_session.get_api()

try:
    vk.method_name(parameter)
except vk_api.exceptions.ApiError as e:
    print(e)

Таким образом, мы устанавливаем соединение с API, вызываем нужную функцию, и обрабатываем возможную ошибку с помощью исключения vk_api.exceptions.ApiError и выводим её на экран.

Обработка ошибок подключения и авторизации

Если возникает ошибка при авторизации или подключении к API, необходимо управлять ей так же, как и с ApiError. Можно использовать исключение ConnectionError, чтобы обработать ошибку подключения, или vk_api.AuthError, чтобы обработать ошибку авторизации:

import vk_api

try:
    vk_session = vk_api.VkApi(token='TOKEN')
    vk_session.auth()
    vk = vk_session.get_api()
except (vk_api.AuthError, vk_api.exceptions.ApiError, ConnectionError) as e:
    print(e)

Здесь мы обрабатываем три различные ошибки, такие как AuthError, ApiError и ConnectionError, используя исключения.

Обработка ошибок несуществующего ключа

Ещё одним распространённым случаем ошибки является передача несуществующего ключа доступа. Для обработки этой ошибки можно использовать KeyError, чтобы проверить, был ли передан корректный ключ:

try:
    vk_session = vk_api.VkApi(token='TOKEN')
    vk_session.auth()
    vk = vk_session.get_api()
except (KeyError) as e:
    print(e)

Таким образом, мы проверяем, был ли передан корректный ключ доступа.

Уход от частых ошибок

Чтобы избежать частых ошибок, можно использовать одну из этих практик:

  1. Логирование ошибок — это удобный способ отследить возникновение ошибок в процессе работы бота и определить их причины.
  2. Использование необходимых прав доступа — чтобы избежать ошибок, связанных с необходимостью прав доступа, рекомендуется проверять их правильность и использовать только необходимые права.
  3. Использование совместимых версий API — для избежания ошибок рекомендуется использовать только последние совместимые версии API.

Заключение

Обработка ошибок является важной составляющей создания ботов на Vk_api. В статье были рассмотрены лучшие практики обработки ошибок при работе с API социальной сети ВКонтакте. Использование конструкций try-except, логирование ошибок, проверка прав доступа и использование совместимых версий API помогут сделать вашего бота более надежным и удобным в использовании.

Понравилась статья? Поделить с друзьями:
  • Qbittorrent ошибка отсутствуют файлы
  • Qbittorrent ошибка expected value in bencoded string
  • Python try except несколько ошибок
  • Python try except как получить текст ошибки
  • Qbittorrent выдает ошибку при скачивании