首页 > 解决方案 > 'yield from' 函数之外

问题描述

所以我有一个用于跟踪/添加/删除点的不和谐机器人的代码。我对python很陌生,到目前为止,我已经通过运气或谷歌的帮助修复了所有错误,但我似乎不知道如何解决这个问题。每当我尝试运行代码时,我都会得到

功能之外的“收益”。

我将如何解决这个问题?

@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')

编辑:

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

代码

标签: pythonbotsdiscordyielddiscord.py

解决方案


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

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()
            # ...

推荐阅读