Как исправить ошибку «AttributeError: 'set' object has no attribute 'items'» в дискорд-боте?

Ссылка скопирована
4 января 2026 1 ответ

Код:

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()})

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

Для исправления ошибки "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)

# Неправильный пример 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() и т.д.

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

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

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно