Я просто пытаюсь выполнить команду остановки реализации с помощью Задачи, но программа возвращает этот код
[AttributeError: 'NoneType' object has no attribute 'cancel']
, который, кажется, не хранит глобальное значение, мне не хватает знаний о глобальном значении?
как следует Я реализую эту команду
import discord
import asyncio
task = None
async def start(message):
while True:
await message.channel.send("loop")
await asyncio.sleep(10)
class MyClient(discord.Client):
async def on_ready(self):
print('Logged on as {0}!'.format(self.user))
async def on_message(self, message):
if message.author == client.user:
return
if message.content.startswith("!p start"):
global task
task = await client.loop.create_task(start(message))
elif message.content.startswith("!p stop"):
task.cancel()
task = None
client = MyClient()
client.run('TOKEN')
if __name__ == "__main__":
pass
Переформатировать немые коды
import discord
import asyncio
class TaskStore():
global task
def __init__(self, task):
self.task = task
async def start(message):
while True:
await message.channel.send("loop")
await asyncio.sleep(10)
class MyClient(discord.Client):
async def on_ready(self):
print('Logged on as {0}!'.format(self.user))
async def on_message(self, message):
if message.author == client.user:
return
if message.content.startswith("!p start"):
TaskStore.task = await client.loop.create_task(start(message))
elif message.content.startswith("!p stop"):
TaskStore.task.cancel()
TaskStore.task = None
else:
print("not working")
client = MyClient()
client.run('TOKEN')
if __name__ == "__main__":
pass
Error
Игнорирование исключения в трассировке on_message (последний вызов был последним):
Файл "discord \ client.py", строка 270, в _run_event
await coro (* args, ** kwargs) Файл "main.py", строка 30, в on_message
TaskStore.task.cancel () AttributeError: тип объекта «TaskStore» не имеет атрибута «task»