«доход от» вне функции - PullRequest
0 голосов
/ 03 ноября 2018

Итак, у меня есть этот код для бота, который будет отслеживать / добавлять / удалять очки. Я довольно плохо знаком с Python, и все ошибки, которые я до сих пор исправлял, я либо по счастливой случайности, либо с помощью Google, но я не могу понять, как исправить этот бит. Всякий раз, когда я пытаюсь запустить код, я получаю

«доход от» вне функции.

Как бы я решил эту проблему?

@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:

Вот изображение кода. Не мог сделать это выглядит лучше Код:

Code

1 Ответ

0 голосов
/ 03 ноября 2018

(Ваш скриншот подтверждает теорию моего комментария , поэтому вы можете опубликовать его как ответ.)

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