Почему elif invalid syntax?

Рейтинг: 0Ответов: 1Опубликовано: 22.01.2023

Всем привет. Почему у меня выдаёт ошибку? Вот код.

import telebot
from telebot import types

bot = telebot.TeleBot('TOKEN')

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, 'Привет!✋\n🔥Мы продаём голду, аккаунты и промокоды по самым сладким ценам!🔥\nВсегда мечтал стать крутым в стандоффе? Тогда тебе к нам!')
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    accounts = types.KeyboardButton('КУПИТЬ АККАУНТ👤')
    promo = types.KeyboardButton('КУПИТЬ ПРОМОКОД🎟')
    gold = types.KeyboardButton('КУПИТЬ ГОЛДУ🥇')
    markup.add(accounts, promo, gold)
    bot.send_message(message.chat.id, 'Выберите, что хотите купить', reply_markup=markup)

@bot.message_handler()
def get_user_text(message):
    if message.text == 'КУПИТЬ АККАУНТ👤':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
        buy_account = types.KeyboardButton('АККАУНТ С НОЖОМ И ПЕРЧАТКАМИ - 230₽')
        buy_account_1 = types.KeyboardButton('АККАУНТ С ТЫЧКАМИ - 175₽')
        back_to_menu = types.KeyboardButton('НАЗАД В МЕНЮ🔝')
    markup.add(buy_account, buy_account_1, back_to_menu)
    bot.send_message(message.chat.id, 'Выберите аккаунт, который хотите купить', reply_markup=markup)
    elif message.text == 'Назад':
    bot.send_message(m.c.i, "Вы вернулись назад", reply_markup=accounts, promo, gold)


bot.polling(none_stop=True)

Ответы

▲ 1

По моему, всё довольно очевидно.

Посмотрите на блок, в котором находится elif

В Питоне блоки выделяются отступами.

у вас после if идет отступ и 4 строки кода. Которые выполняются если условие истинно

А потом у Вас обратный отступ.

С точки зрения языка, те две строки, которые содержат код

    markup.add(buy_account, buy_account_1, back_to_menu)
    bot.send_message(message.chat.id, 'Выберите аккаунт, который хотите купить', reply_markup=markup)

это то, что будет происходить после закончившегося блока if (и будет выполняться независимо от истинности условия в if)

А потом у вас идет elif. И интерпретатор питона думает "черт побери, откуда он взялся, если if уже давно закончился?"

Как исправить? думаю, добавить отступы у этих двух строк.

Дополнение, дополненное чуть позже

Смотрите, у Вас по ходу работы над программой появляются ошибки. попробуйте прочитать сообщение об ошибке, и, если само сообщение у Вас не вызывает никаких идей - просто погуглить с этим сообщением об ошщибке.

Этот совет звучит очевидно, но он мог бы решить массу вопросов. например, я вижу ваше удаленное сообщение. И ошибка в нём "SyntaxError: positional argument follows keyword argument" говорит о нарушении синтаксиса.

Ну, то есть, при вызове функции есть понятие "positional argument" и "keyword argument". И всегда, вот прямо всегда positional argument должны быть до keyword argument в списке аргументов. Так устроен мир. И это написано много где!