@zeni1agent

Почему бот выдает ошибку No such file or directory: 'temp/?

Решил запустить бота ошибок не выдает и все прекрасно запускает но как только я загружаю файл бот выдает ошибку
line 28 No such file or directory: 'temp/86f7181e-cef6-4809-b61c-e61df0f43fc9.png'.
import time
import telebot
import requests

TOKEN = "1067228659:AAHYjLiwxqsdfdTUQwVbgq6IlqFuYZQ4T_d49M"
KERAS_REST_API_URL = ""

bot = telebot.TeleBot(TOKEN)


@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.reply_to(message, 'Hey Start')


@bot.message_handler(commands=['info'])
def send_welcome(message):
    info = ('Hey Info')
    bot.reply_to(message, info)


import uuid

@bot.message_handler(content_types=["photo"])
def answer_photo(message):
    photo = bot.get_file(message.photo[-1].file_id)
    # URL direction to image
    photo_url = "https://api.telegram.org/file/bot{0}/{1}".format(
        TOKEN, photo.file_path)
    # Computer Vision parameters
    r = requests.get(photo_url)
    file_name = str(uuid.uuid4()) + '.png'
    if r.status_code == 200:
        with open('temp/' + file_name, 'wb') as f:
            f.write(r.content)
    else:
        bot.reply_to(message, 'something fails...')
        return

    img = open('temp/' + file_name, 'rb')

    #img = open('inpred.png', 'rb')

    payload = {"image":img}

    bot.send_chat_action(message.chat.id, 'typing')
    try:
        r = requests.post(KERAS_REST_API_URL, files=payload).json()
    except:
        bot.reply_to(message, 'something fails....')
    print(r)
    time.sleep(1)

    img_path = None
    try:
        if r['success']:
            img_path = r['result_path']
            img_result = open(img_path, 'rb')
            bot.reply_to(message, photo_url)
            bot.send_photo(message.chat.id, img_result, reply_to_message_id=message.message_id)

            img_path = r['mask_path']
            img_result = open(img_path, 'rb')
            bot.reply_to(message, photo_url)
            bot.send_photo(message.chat.id, img_result, reply_to_message_id=message.message_id)
      
            img_path = r['cg_path']
            img_result = open(img_path, 'rb')
            bot.reply_to(message, photo_url)
            bot.send_photo(message.chat.id, img_result, reply_to_message_id=message.message_id)
        else:
            bot.reply_to(message, 'something fails...')
    except:
        bot.reply_to(message, 'something fails...')

@bot.message_handler(func=lambda m: True)
def reply_all(message):
    if message.chat.type == "private":
        bot.reply_to(message, 'Please send me an image so I can describe it!')


bot.polling(none_stop=True)


while True:
    time.sleep(5)

В чем может быть причина?
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
hottabxp
@hottabxp
Эксперт по BeautifulSoup(но это не точно!)
В папке со скриптом создайте папку "temp".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
  1. Вынесите строку `temp/` в отдельную переменную.
  2. Проверяйте при старте бота этот путь на существование.
  3. Если такого пути нет, можно его либо создать, либо выдать соответствующее сообщение об ошибке и завершить работу.

Если путь без "/" вначале , то это относительный путь от текущего на момент запуска скрипта.
Если бот лежит по пути: `/home/my_username/my_bot_folder/my_bot.py`
И запускается так:
`my_bot_folder/my_bot.py`
То текущий каталог на момент запуска у вас домашний:
`/home/my_username`
И бот будет пытаться писать картинки по пути типа:
`/home/my_username/temp/2345435666hashtralala.png`.
Если у вас в домашнем каталоге нет папки temp, то будет эта ошибка.
Нужно создать папку temp в нужном месте.
Можно обработать эту ошибку и в ее обработчике написать `print('please make temp folder in:', os.getcwd())`
Ответ написан
Ваш ответ на вопрос

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

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