Задать вопрос
@pitonessa

Почему при втором цикле telegram бота возникает ошибка 'int' object is not callable (python)?

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

Бот предназначен для расчета ЗП.
Если запустить бота впервые - код отрабатывается корректно и выдает необходимую инфу. В конце, после всех расчетов, появляется сообщение:
---предыдущий код
        msg = bot.send_message(message.from_user.id, 'Для повторного расчета нажми "/start"', reply_markup=cancel)
        bot.register_next_step_handler(msg, start)
def start(message):
    if message.text == '/start' or message.text == 'В начало':
        send_welcome(message)

send_welcome(message) - это функция, которая служит началом цикла работы - приветствие, затем запрос расчетного месяца и оклада у пользователя. Для записи не придумано ничего лучше, чем сделать функцию, в которой с помощью bot.register_next_step_handler() будут попадать значения и присваиваться к переменной.

Однако, если сделан первый расчет и выполнен возврат к началу - бот код отрабатывается ровно до момента, как вводится расчетный месяц и падает с ошибкой:
TypeError: 'int' object is not callable

полный стектрейс:
Traceback (most recent call last):
  File "/home/LDAP/novikovale/.local/lib/python3.7/site-packages/telebot/__init__.py", line 694, in __threaded_polling
    raise e
  File "/home/LDAP/novikovale/.local/lib/python3.7/site-packages/telebot/__init__.py", line 650, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/home/LDAP/novikovale/.local/lib/python3.7/site-packages/telebot/util.py", line 143, in raise_exceptions
    raise self.exception_info
  File "/home/LDAP/novikovale/.local/lib/python3.7/site-packages/telebot/util.py", line 89, in run
    task(*args, **kwargs)
TypeError: 'int' object is not callable

Путем дебага нашла участки кода, которые, как предполагаю инициируют эту ошибку. Возможно, проблема в присвоении к month = целое число, но как это поправить и почему первый запуск отрабатывает. Я прочитала несколько статей и подобных вопросов - но в основном там производятся вычисления и где-то дублится название функции и переменной или утерян арифметический знак.

Буду благодарна знающим людям, если помогут разобраться.
Если не хватает исходного кода - добавлю.
kod
---предыдущий код---
# функция выбора месяца
@bot.message_handler(content_type=['text'])
def monthes(message):
    # кнопки
    m = types.ReplyKeyboardMarkup(resize_keyboard=True)
    # проверка работы предыдущей функции
    if message.text == 'Аванс' or message.text == 'Зарплата':
        m.row('Январь')
        m.row('Февраль')
        m.row('Март')
        m.row('Апрель')
        m.row('Май')
        m.row('Июнь')
        m.row('Июль')
        m.row('Август')
        m.row('Сентябрь')
        m.row('Октябрь')
        m.row('Ноябрь')
        m.row('Декабрь')
        m.row('Назад')
        #  сообщение пользователю - выбрать месяц
        msg = bot.send_message(message.from_user.id, 'Выберите месяц', reply_markup=m)
        # для связи функций - принимает в себя сообщение из текущей и говорит о том, что оно будет обработано в следующей функции salary, а также записана в record_m
        bot.register_next_step_handler(msg, record_m)
        bot.register_next_step_handler(msg, salary)
    else:
        # если будет отправлено что-то иное - возврат в предыдущее меню
        send_welcome(message)
        return

# запись ответа (месяц)
def record_m(message):
    global month_u
    month_u = message.text
    month_check()

# нумерация месяцов
def month_check():
     global month
     if month_u == 'Январь':
         month = 1
     elif month_u == 'Февраль':
         month = 2
     elif month_u == 'Март':
         month = 3
     elif month_u == 'Апрель':
         month = 4
     elif month_u == 'Май':
         month = 5
     elif month_u == 'Июнь':
         month = 6
     elif month_u == 'Июль':
         month = 7
     elif month_u == 'Август':
         month = 8
     elif month_u == 'Сентябрь':
         month = 9
     elif month_u == 'Октябрь':
         month = 10
     elif month_u == 'Ноябрь':
         month = 11
     elif month_u == 'Декабрь':
         month = 12
     return month

---следующий код---
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Полный код?

Скорее всего salary где-то становится числом
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы