@Innaro

Не очищается Словарь на Python, как это можно решить?

Подскажите, есть код для тг бота, и после одного раза выполнения код уходит в
'str' object is not callable620ca7b2eee5a194828623.png

doc = DocxTemplate("Eidos.docx")    
record_dict = {};

# Функция, обрабатывающая команду /start
# Команда start
       
@bot.message_handler(commands=["start"])
def start(m, res=False):
        bot.send_message(m.chat.id, 'Я на связи. Напиши мне что-нибудь )')

# Функция, обрабатывающая команду /pass
# Команда pass

@bot.message_handler(commands=["pass"])
def passn(message, res=False):
    print(record_dict)
    record_dict.clear() 
    path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'ЗАЯВКА НА ВЪЕЗД НА склад.docx')
    if os.path.isfile(path) == True:
        os.remove(path)
    else:
        print("Файла нет, идем дальше")
    bot.send_message(message.chat.id, 'Марка Автомобиля? ');
    print(record_dict)
    bot.register_next_step_handler(message, brand)

# Функция, обрабатывающая команду /send
# Команда send

@bot.message_handler(commands=["send"])
#Сохранием файл
def nexting(message, res=False):
    record_dict = {'Brand' : brand, 'Number' : number, 'ArrivalDate' : arrivaldate}
    print(record_dict)
    doc.render(record_dict)
    doc.save("ЗАЯВКА НА ВЪЕЗД НА склад.docx")
    record_dict.clear()
    
@bot.message_handler(content_types=["text"])
def brand(message): #получаем марку Автомобиля
    global brand;
    brand = message.text; 
    record_dict['Brand'] = brand
    print(record_dict)
    bot.send_message(message.chat.id, 'Номера Автомобиля? ');
    bot.register_next_step_handler(message, number);
    
def number(message):
    global number; #получаем номер Автомобиля
    number = message.text;
    record_dict['Number'] = number
    print(record_dict)
    bot.send_message(message.chat.id, 'Какого числа должен заехать? ');
    bot.register_next_step_handler(message, arrivaldate);        

def arrivaldate(message):
    global arrivaldate; #получаем дату въезда
    arrivaldate = message.text;
    record_dict['Arrivaldate'] = arrivaldate
    print(record_dict)

    
# Запускаем бота
while True:
    try:
        bot.polling(none_stop=True,interval=0)
    except Exception as e:
        print(e)
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
@twistfire92
Python backend developer
Вы назвали функцию и строковую переменную одним именем.
до момента brand = message.text, brand было именем функции, а теперь стало именем какой-то строки. И когда во второй раз вы пытаетесь вызвать функцию brand, интерпретатор ругается на то, что это строка и вызвать ее нельзя.

И то же самое у вас происходит с остальными функциями. Дайте им другие имена.

И на будущее указывайте в каком месте произошла ошибка.

PS. также посоветовал бы не использовать глобальную переменную record_dict. Если через ваш бот будут одновременно оставлять заявки 2 человека, то все у вас перепутается и упадет в ошибку. Лучше пробрасывайте введенные пользователем значения через register_next_step_handler
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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