Как исправить ошибку «AttributeError: 'set' object has no attribute 'items'» в дискорд-боте?
Код:
import requests channelID = Заполнено валидным айди канала headers = {"Токен есть если что"} with open('text.txt', 'r', encoding='utf-8') as file: lines = [line.strip() for line in file] for lines in lines: requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": lines}) |
import requests channelID = Заполнено валидным айди канала headers = {"Токен есть если что"} with open('text.txt', 'r', encoding='utf-8') as file: lines = [line.strip() for line in file] for lines in lines: requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": lines})
Выходит такая вот ошибка при попытке запуска:
Traceback (most recent call last): File "d:DesktopНовая папкаdiscordbot.py", line 10, in <module> requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": lines}) File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsapi.py", line 115, in post return request("post", url, data=data, json=json, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsapi.py", line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestssessions.py", line 575, in request prep = self.prepare_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestssessions.py", line 486, in prepare_request p.prepare( File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsmodels.py", line 369, in prepare self.prepare_headers(headers) File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsmodels.py", line 489, in prepare_headers for header in headers.items(): ^^^^^^^^^^^^^ AttributeError: 'set' object has no attribute 'items' |
Traceback (most recent call last): File "d:DesktopНовая папкаdiscordbot.py", line 10, in <module> requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": lines}) File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsapi.py", line 115, in post return request("post", url, data=data, json=json, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsapi.py", line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestssessions.py", line 575, in request prep = self.prepare_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestssessions.py", line 486, in prepare_request p.prepare( File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsmodels.py", line 369, in prepare self.prepare_headers(headers) File "C:UsersUserAppDataLocalPackagesPythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0LocalCachelocal-packagesPython311site-packagesrequestsmodels.py", line 489, in prepare_headers for header in headers.items(): ^^^^^^^^^^^^^ AttributeError: 'set' object has no attribute 'items'
Дополнительно:
Ответы:
Почитайте этот пример, запустите его и посмотрите на результат
s = {'123'} d = {'token': '123'} print(type(s)) print(type(d)) |
s = {'123'} d = {'token': '123'} print(type(s)) print(type(d))
Вы явно хотите использовать словарь, но создали вместо этого множество о чем вам написано в ошибке.
В вашем коде несколько ошибок, одна из них - в качестве headers ожидается структура типа «словарь» («dict»), а вы создаете тип «множество» («set»).
Должно быть что-то вроде:
headers = {'user-agent': 'my-app/0.0.1', 'token': 'Токен есть если что'} |
headers = {'user-agent': 'my-app/0.0.1', 'token': 'Токен есть если что'}
и так далее, это прям из документации по requests
Вторая ошибка - for lines in lines:
очевидно надо что-то вроде
for line in lines: …json = {"content": line} |
for line in lines: …json = {"content": line}
Исходя из всего этого видно, что хорошо бы разобраться со структурами вообще и в python со стандартными встроенными типами структур в частности, а также с итераторами и итерацией.
- Ну и я бы вообще не делал lines, если он у вас только для получения line.
with open('text.txt', 'r', encoding='utf-8') as file: for line in file: requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": line.strip()})
with open('text.txt', 'r', encoding='utf-8') as file: for line in file: requests.post(f"https://discord.com/api/v9/channels/{channelID}/messages", headers = headers, json = {"content": line.strip()})
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для исправления ошибки "AttributeError: 'set' object has no attribute 'items'" в дискорд-боте, вам необходимо понять, что означает данная ошибка и как ее можно исправить.
Эта ошибка обычно возникает, когда вы пытаетесь использовать метод items() на объекте типа set, который не имеет такого метода. Метод items() используется для получения пар ключ-значение из словаря в Python, а не из множества (set).
Чтобы исправить эту ошибку, вам необходимо убедиться, что вы используете правильный тип данных. Если вы хотите получить пары ключ-значение из словаря, убедитесь, что ваш объект действительно является словарем, а не множеством.
Пример исправления ошибки:
# Неправильный пример my_set = {'apple', 'banana', 'cherry'} for key, value in my_set.items(): print(key, value) # Правильный пример my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'} for key, value in my_dict.items(): print(key, value)
Если у вас все-таки есть необходимость использовать множество (set), то вам нужно будет использовать другие методы для работы с ними, например, методы union(), intersection(), difference() и т.д.
Надеюсь, что данное объяснение поможет вам исправить ошибку и продолжить разработку вашего дискорд-бота без проблем. Если у вас остались дополнительные вопросы, не стесняйтесь задавать их.