kan3k1k3n
@kan3k1k3n

Как присвоить переменной значение локальной переменной?

суть: пользователь вводит в телеграм бота название товара и его цену. этот текст сохраняется в переменную. переменная с текстом из телеграма присваивается глобальной переменной, которая добавляется в базу данных
код:
import telebot
import sqlite3
import random
bot = telebot.TeleBot('token')

@bot.message_handler(commands=['start'])
def start(message):
    user_name = message.from_user.first_name
    bot.reply_to(message, 'привет, {0}!'.format(user_name) + '\nвведи название товара, цену и картинку, а я добавлю эти данные в базу данных!')

@bot.message_handler(commands=['text'])
def start_message(message):
    bot.send_message(message.chat.id, 'Введите первый текст')
@bot.message_handler(func=lambda message: True)
def get_text_1(message):
    global nazvanie
    bot.send_message(message.chat.id, 'введите название товара: ')
    nazvanie = message.text
    return nazvanie
@bot.message_handler(func=lambda message: True)
def get_text_2(message):
    global cost
    bot.send_message(message.chat.id, 'введите цену товара: ')
    cost = message.text
    return cost

conn = sqlite3.connect('shop.db')
cursor = conn.cursor()
nazvanie_tovara = nazvanie
cost_tovara = cost
data = [nazvanie_tovara, cost_tovara]
cursor.execute("INSERT INTO tovary VALUES(?, ?);", data)
conn.commit()

bot.infinity_polling()

но у меня вылезает ошибка: name 'nazvanie' is not defined.
как я понял, потому что я пытаюсь присвоить глобальной переменной значение из функции.
но я объявил эту переменную как глобальную (global nazvanie, global cost)
как исправить?
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 2
@MaksKtoToTam
Убери return - питон думает, что ты возвращаешь локальную переменную nazvanie, которой не существует. Да и зачем return для глобальной переменной?
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Ты написал глупость. Вот этот код
conn = sqlite3.connect('shop.db')
cursor = conn.cursor()
nazvanie_tovara = nazvanie
cost_tovara = cost
data = [nazvanie_tovara, cost_tovara]
cursor.execute("INSERT INTO tovary VALUES(?, ?);", data)
conn.commit()

выполнится один раз, перед запуском бота, до срабатывания обработчиков.
Что-то мне подсказывает, что ты не этого хотел.

Внеси это внутрь обработчика команды, тогда и глобальная переменная не понадобится.
Ответ написан
Ваш ответ на вопрос

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

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