@nyar_roller
Молодой, перспектиный Python Developer

Как передать переменную в register_next_step_handler?

Столкнулся с проблемой, нужно переменную из одной функции, в которой вызывается bot_register_next_step_handler, передать в другую, облазил кучу форумов, ни один совет не заработал. Что я пробовал:
Добавлять лямбда функцию, которая бы вызывал мою с передачей параметров:

def foo1(message):
    sent = bot.send_message(message.chat.id, "Some text")
    cat = 10
    bot.register_next_step_handler(sent, lambda msg: foo2(message,cat))
def foo2(message, cat):
    pass

И указывание переменных сразу после названия функции:
def foo1(message):
    sent = bot.send_message(message.chat.id, "Some text")
    cat = 10
    bot.register_next_step_handler(sent, foo2,  cat)
def foo2(message, cat):
    pass


Переменная cat попросту не передаётся в foo2:
TypeError: foo2() missing 1 required positional argument: 'cat'

Что подскажите, знатоки?
  • Вопрос задан
  • 559 просмотров
Пригласить эксперта
Ответы на вопрос 4
AKotenko
@AKotenko
None
lxstvayne
@lxstvayne
Люблю Python
@twistfire92
Python backend developer
В коментах уже написал, что второй вариант правильный. Решил сам проверить и да, так и надо делать. Видимо у вас где-то еще проблема с функцией foo2.
Вот простой пример:

import telebot
from telebot import types

API_TOKEN = ''

bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(func=lambda message: True)
def start(message):
    msg = bot.reply_to(message, 'Проверка проброса параметра')
    param = 23
    bot.register_next_step_handler(msg, step, param)


def step(message, param):
        bot.reply_to(message, f'{message.text}: {param}')

bot.infinity_polling()


Результат:
61fa1ac863bd8835159711.png
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
И указывание переменных сразу после названия функции

Эта версия должна быть рабочей. Уверены, что больше эта функция нигде не вызывается без аргументов? registernextstephaneler принимает *args и **kwargs
Какая версия библиотеки?

В примерах использования так же есть вариант

https://github.com/eternnoir/pyTelegramBotAPI/blob...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы