Как исправить ошибку local variable 's' referenced before assignment?

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

Помогите, пожалуйста, исправить ошибку в коде

Ошибка:

File "C:\Users\user\PycharmProjects\pythonProject\test.py", line 63, in convert_number
    bot.send_message(message.chat.id, f'Ответ: {s}')
UnboundLocalError: local variable 's' referenced before assignment

Код:

import telebot
from telebot import types

bot = telebot.TeleBot('####')

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('Калькулятор')
    markup.add(item1)
    bot.send_message(message.chat.id, 'Привет!', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def send_text(message):
    if message.chat.type == 'private':
        if message.text == 'Калькулятор':
            bot.send_message(message.chat.id, 'Введите число')
            bot.register_next_step_handler(message, get_number)

def get_number(message):
    try:
        a = message.text
        bot.send_message(message.chat.id, 'Введите основание системы счисления числа')
        bot.register_next_step_handler(message, lalala, a)
    except ValueError:
        bot.send_message(message.chat.id, 'Пожалуйста, нажмите на кнопку "Калькулятор", чтобы заново начать операцию')

def lalala(message, a):
    try:
        b = int(message.text)
        bot.send_message(message.chat.id, 'Введите основание системы счисления, в которое Вы хотите перевести число')
        bot.register_next_step_handler(message, convert_number, a, b)
    except ValueError:
        bot.send_message(message.chat.id, 'Пожалуйста, нажмите на кнопку "Калькулятор", чтобы заново начать операцию')

def convert_number(message, a, b):
    try:
        n = int(message.text)
        if b != 10:
            
            power = 1
            ans = 0
            for i in a[::-1]:
                if i < 'A':
                    ans += int(i) * power
                else:
                    ans += (ord(i) - ord('A') + 10) * power
                power *=b

        else:
            s = ''
            ans = int(a)

            al = 'ABCDEF'
            while ans > 0:
                c = ans % n
                if c < 10:
                    s = str(c) + s
                else:
                    s = al[c - 10] + s
                ans //= n

        bot.send_message(message.chat.id, f'Ответ: {s}')
    except ValueError:
        bot.send_message(message.chat.id, 'Пожалуйста, нажмите на кнопку "Калькулятор", чтобы заново начать операцию')
bot.polling(none_stop=True, interval=0)

Ответы

▲ 1

Для исправления ошибки достаточно инициализировать переменную 's' в самом начале функции def convert_number() перед блоком try.