'yield from' 在功能之外

'yield from' outside of function

所以我有一个 discord 机器人的代码,它将保持 track/add/remove 点。我是 python 的新手,到目前为止我已经修复了所有错误,要么是靠运气,要么是在 google 的帮助下,但我似乎无法弄清楚如何修复这一点。每当我尝试 运行 代码时,我都会得到

"yield from" outside of function.

我该如何解决这个问题?

@asyncio.coroutine
def func(self): passon_message (self, message)
if message.content.startswith('p!'):
        if message.content[2] in self.houses:
            split_message = message.content.split()
            if split_message[0] == f'p!{message.content[2]}':
                if split_message[1] == 'add' or split_message[1] == 'remove':
                    if split_message[2].isdigit():
                        if split_message[1] == 'add':
                            old_points = self.bot.hp.data.get('housepoints').get(self.houses.get(message.content[2])).get('points')
                            self.bot.hp.data['housepoints'][self.houses.get(message.content[2])]['points'] = old_points + int(split_message[2])
                            self.bot.hp.save()
                            yield from message.channel.send('added')
                        if split_message[1] == 'remove':
                            old_points = self.bot.hp.data.get('housepoints').get(self.houses.get(message.content[2])).get('points')
                            self.bot.hp.data['housepoints'][self.houses.get(message.content[2])]['points'] = old_points - int(split_message[2])
                            self.bot.hp.save()
                            yield from message.channel.send('removed')

EDIT:

这是代码的图像。不能让它在这里看起来更好 代码:

(您的屏幕截图证实了 理论,因此将其作为答案发布以供您接受。)

Python 通过缩进识别函数(或 if 语句,for 循环,...)中包含哪些代码。如果你在同一行放置一个语句,像这样:

def foo(): print("Hello.")

它假定该函数仅包含该语句。所以在你的代码中只有语句 passon_message (self, message)func 中。要包含所有这些行,您需要将该语句放在新的缩进行中,并缩进以下 if 语句:

@asyncio.coroutine
def func(self):
    passon_message (self, message)
    if message.content.startswith('p!'):
        if message.content[2] in self.houses:
            split_message = message.content.split()
            # ...