Найти - Пользователи
Полная версия: UnboundLocalError: local variable 'markup' referenced before assignment
Начало » Python для новичков » UnboundLocalError: local variable 'markup' referenced before assignment
1
a-rooot
Windows 7(x64)
Python 3.8.2
PyCharm 2019

Начал изучать Python. Создал бота в Телеграм. Добавил интерактивные кнопки, но выдаёт ошибку:
UnboundLocalError: local variable ‘markup’ referenced before assignment

примерно понимаю, что что имеется ввиду, что к переменной markup обращение происходит раньше, чем её присваивание, но не доходит, как исправить, чтобы дальнейшие значения(кнопки в боте) могли кликаться?
Именно при выборе кнопок 1,2,3,4 вылетает данная ошибка

 import telebot
from telebot import types
from telebot import apihelper
bot = telebot.TeleBot('token')
apihelper.proxy = {"https": "socks5://96.113.176.101:1080"}
@bot.message_handler(commands=['telegram'])
def open_telegram(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton("Написать", url="https://сайт"))
    bot.send_message(message.chat.id,
            "Ну раз уж я не могу тебе помочь, нажимай на кнопку",
            parse_mode='html', reply_markup=markup)
@bot.message_handler(commands=['insta'])
def instagram(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton("Перейти в Инстаграм", url="https://сайт"))
    bot.send_message(message.chat.id, "Переходи.", parse_mode='html', reply_markup=markup)
@bot.message_handler(commands=['poisk'])
def poisk(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton("Глобальный поиск", url="https://www.google.ru/"))
    bot.send_message(message.chat.id, "Тут ты точно найдешь, что искал.", parse_mode='html', reply_markup=markup)
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
    btn1 = types.KeyboardButton('Виды')
    btn2 = types.KeyboardButton('Подвиды')
    btn3 = types.KeyboardButton('О нас')
    btn4 = types.KeyboardButton('Сюрприз')
    markup.add(btn1, btn2, btn3, btn4)
    send_mess = f"<b>Привет {message.from_user.first_name}</b>!\nСмотри что есть:"
    bot.send_message(message.chat.id, send_mess, parse_mode='html', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def mess(message):
    get_message_bot = message.text.strip()
    if get_message_bot == "Начать тест заново":
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
        btn1 = types.KeyboardButton('Виды')
        btn2 = types.KeyboardButton('Подвиды')
        btn3 = types.KeyboardButton('О нас')
        btn4 = types.KeyboardButton('Сюрприз')
        btn5 = types.KeyboardButton('Начать тест заново')
        markup.add(btn1, btn2, btn3, btn4, btn5)
        final_message = "Посмотришь еще? \nКликли на вид, с которым хочешь ознакомиться:"
    elif get_message_bot == "Виды":
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
        btn1 = types.KeyboardButton('1')
        btn2 = types.KeyboardButton('2')
        btn3 = types.KeyboardButton('3')
        btn4 = types.KeyboardButton('4')
        btn5 = types.KeyboardButton("Начать тест заново")
        markup.add(btn1, btn2, btn3, btn4, btn5)
        final_message = "Отлично, смотри:"
    elif get_message_bot == "1":
        final_message = "1 вид примечателен тем, что........."
    elif get_message_bot == "2":
        final_message = "2 вид примечателен тем, что........."
    elif get_message_bot == "3":
        final_message = "3 вид примечателен тем, что........."
    elif get_message_bot == "4":
        final_message = "4 вид примечателен тем, что........."
    
    else:
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
        btn1 = types.KeyboardButton('Виды')
        btn2 = types.KeyboardButton('Подвиды')
        btn3 = types.KeyboardButton('О нас')
        btn4 = types.KeyboardButton('Сюрприз')
        markup.add(btn1, btn2, btn3, btn4)
        final_message = "Стоп!\nЛучше тыкни на кнопку"
    bot.send_message(message.chat.id, final_message, parse_mode='html', reply_markup=markup)
bot.polling(none_stop=True)

py.user.next
a-rooot
Именно при выборе кнопок 1,2,3,4 вылетает данная ошибка
Добавь в эти ветви создание markup, либо добавь создание markup по умолчанию над ветвлением. Вызов bot.send_message() после ветвления требует markup в последнем аргументе.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB