Исключения¶
- authors
-
python273
- license
-
Apache License, Version 2.0, see LICENSE file
- copyright
-
-
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.
Пример:
- vk_api.exceptions.ApiError: [5] User authorization failed: invalid access_token (4).
- 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
У 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
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)
Таким образом, мы проверяем, был ли передан корректный ключ доступа.
Уход от частых ошибок
Чтобы избежать частых ошибок, можно использовать одну из этих практик:
- Логирование ошибок — это удобный способ отследить возникновение ошибок в процессе работы бота и определить их причины.
- Использование необходимых прав доступа — чтобы избежать ошибок, связанных с необходимостью прав доступа, рекомендуется проверять их правильность и использовать только необходимые права.
- Использование совместимых версий API — для избежания ошибок рекомендуется использовать только последние совместимые версии API.
Заключение
Обработка ошибок является важной составляющей создания ботов на Vk_api. В статье были рассмотрены лучшие практики обработки ошибок при работе с API социальной сети ВКонтакте. Использование конструкций try-except, логирование ошибок, проверка прав доступа и использование совместимых версий API помогут сделать вашего бота более надежным и удобным в использовании.