@Artin24
Начинающий

Почему при использовании первого элемента списка выдает ошибку выхода за грани списка?

Пишу Вк Бота для игры в кости.
Код:
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.utils import get_random_id
import bs4 as bs4
import requests

class VkBot:
	def __init__(self, user_id):
		print('Создан объект бота!')
		self._USER_ID = user_id
		self._USERNAME = self._get_user_name_from_vk_id(user_id)
		self._COMMANDS = ['Бот', 'Да', 'да', 'Бросить кости', 'бот', 'бросить кости']
	#ID пользователя
	def _get_user_name_from_vk_id(self, user_id):
		request = requests.get("https://vk.com/id" + str(user_id))
		bs = bs4.BeautifulSoup(request.text, "html.parser")
		
		user_name = self._clean_all_tag_from_str(bs.findAll("title")[0])
		
		return user_name.split()[0]
	#Очистка тэгов
	@staticmethod
	def _clean_all_tag_from_str(string_line):
		"""
		Очистка строки stringLine от тэгов и их содержимых
		:param string_line: Очищаемая строка
		:return: очищенная строка
		"""
		result = ""
		not_skip = True
		for i in list(string_line):
			if not not_skip:
				if i == "<":
					not_skip = False
				else:
					result += i
			else:
				if i == ">":
					not_skip = True
		return result
	#Главная функция бота(игра в кости)
	def dice():
		pass
	#Вывод ответа на команду
	def new_message(self, message):
		if message.upper() == self._COMMANDS[0]:
			return "Присутствую!"
		elif message.upper() == self._COMMANDS[1] or message.upper() == self._COMMANDS[2]:
			return "Нецензурное слово!"
		elif message.upper() == self._COMMANDS[3]:
			return dice()
		else:
			return "Не понимаю о чем ты..."

ошибку выдаёт на строчке
return user_name.split()[0]
на сайте по гайду которого я делаю это бота написано точь в точь, только у них работает, а у меня нет.
Подскажите пожалуйста как решить проблему.
P. S. вот сайт: https://habr.com/ru/post/427691/
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Статья позорная, не советую на нее ориентироваться. Ошибка возникает из-за пустой строки в результате работы.
Свой поиск имени на этот замените
user_name = bs.find('title').text.split('|')[0].strip()


И советую найти любой другой материал, хоть ту же доку по ВК апи. Потому что смысл парсить имя через бс4 и requests, если подключен api?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Потому что user_name содержит пустую строку. А вот почему так, это уже второй вопрос.
Хотя _clean_all_tag_from_str() это тот еще код... вообще разве в title могут быть вложенные теги?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы