Почему-то бот не считает my_salary? что я делаю не так

Ввожу по очереди, имя, 30, 30 и все. Код остановился. Ошибка NameError: name 'month' is not defined. Пробовал много разных вариантов, ошибки были в том числе с salary. также пишет что не определена. В одном из вариантов написания кода, бот запрашивал все данные и просто останавливался

import telebot

bot = telebot.TeleBot('5491821896:AAGlZ3lbVi',)

@bot.message_handler(commands=['start'])
def send_welcome(message):
    msg = bot.reply_to(message, """\
Hi there, I am Example bot.
What's your name?
""")
    bot.register_next_step_handler(msg, month_get)

def month_get(message):
    month = bot.send_message(message.chat.id, 'write 30')
    bot.register_next_step_handler(month, get2)

def get2(message):
    work = bot.send_message(message.chat.id, 'write 30')
    bot.register_next_step_handler(work, my_salary, work, month)

def my_salary (work, month):
    salary = 19000 / month * work
    bot.send_message(message.chat.id, f'your salary is {salary}')

bot.polling()

Ответы (2 шт):

Автор решения: otobrazhaemoe_imya

В начале стоит создать эти переменные.

month = 0
work = 0
salary = 0

А в начале функции my_salary, стоит добавить этот код:

global month
global work

Этот код делает переменные доступными для этой функции. Надеюсь помог.

→ Ссылка
Автор решения: oleksandrigo

Ты что-то странное накодил

@bot.message_handler(commands=['start'])
def send_welcome(message):
    # не обязательно делать новую переменную месседж,
    # register_next_step_handler наплевать какой месседж ты ему дашь
    # и что за странный перенос строки?
    # msg = bot.reply_to(message, """\
    # Hi there, I am Example bot.
    # What's your name?
    # """)
    ## делай так
    bot.reply_to(message, "Hi there, I am Example bot.\n"
                          "What's your name?")
    # сюда кидай просто message
    # и назови функцию более понятно, ты же требуешь имя а не месяц
    bot.register_next_step_handler(message, get_name)


def get_name(message):
    bot.send_message(message.chat.id, 'write month')
    # ты наверное забыл имя
    bot.register_next_step_handler(message, get_month, message.text)


# проверка является ли чилсом float
def is_digit(string: str):
    try:
        float(string)
        return True
    except ValueError:
        return False


# доп аргумент name это message.text предыдущей функции
def get_month(message, name):
    if is_digit(message.text):
        bot.send_message(message.chat.id, 'write work')
        bot.register_next_step_handler(message, my_salary, name, float(message.text))
    else:
        bot.send_message(message.chat.id, 'write month')
        bot.register_next_step_handler(message, get_month, name)


def my_salary(message, name, month):
    if is_digit(message.text):
        work = float(message.text)
        salary = 19000 / month * work
        bot.send_message(message.chat.id, f'{name} your salary is {salary}')
    else:
        bot.send_message(message.chat.id, 'write work')
        bot.register_next_step_handler(message, my_salary, name, month)
→ Ссылка