Я сталкиваюсь с ошибкой Maxtries в Python при создании приложения в потоке

Я пытаюсь создать приложение, которое принимает заказы на смузи.

Я хочу добавить пищевую ценность после выбора фруктов, но ее невозможно получить через API.

Вот код.

import streamlit as st
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import col
import requests


st.title("Customize your Smoothie! App :cup_with_straw:")
st.write(
    """Choose the fruits you want in your custom Smoothie!
    """
)


name_on_order = st.text_input('Name on Smoothie:')
st.write('The name on your Smoothie be:', name_on_order)


session = get_active_session()
my_dataframe = session.table("smoothies.public.fruit_options").select(col('FRUIT_NAME'))

ingredients_list = st.multiselect('Choose upto 5 ingredients:',my_dataframe,max_selections=5)


if ingredients_list:
    ingredients_string = ""
    for fruit_chosen in ingredients_list:
        ingredients_string+= fruit_chosen+" "
        
        fruityvice_response = requests.get("https://fruityvice.com/api/fruit/"+fruit_chosen)
        st.text(fruityvice_response.json())
        #fv_dv = st.dataframe(data=fruityvice_response.json(), use_container_width=True)

    my_insert_stmt = """ insert into smoothies.public.orders(ingredients,name_on_order)
            values ('""" + ingredients_string + """','""" + name_on_order + """')"""
    
    #st.write(my_insert_stmt)
    time_to_insert= st.button('Submit Order')
    if time_to_insert:
        session.sql(my_insert_stmt).collect()
        st.success('Your Smoothie is ordered!', icon = "✅")

Это ошибка, которую я получаю:

ConnectionError: HTTPSConnectionPool(host='fruityvice.com', port=443): Max retries exceeded with url: /api/fruit/watermelonElderberries (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0xffff79c51400>: Failed to resolve 'fruityvice.com' ([Errno -3] Temporary failure in name resolution)"))
Traceback:
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 552, in _run_script
    exec(code, module.__dict__)
File "/home/udf/88736396/streamlit_app.py", line 33, in <module>
    fruityvice_response = requests.get("https://fruityvice.com/api/fruit/watermelon"+fruit_chosen)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
File "/usr/lib/python_udf/5f3d47ae4d4f192ce40f32e768dce379f8b04388fe033d00a5b697a7351e713f/lib/python3.8/site-packages/requests/adapters.py", line 519, in send
    raise ConnectionError(e, request=request)

Я попробовал блок try-кроме и задержал время обработки, чтобы завершить цикл.

не создавайте строки sql с объединением строк и форматированием, это рецепт для атак с использованием sql-инъекций.

UpAndAdam 09.04.2024 19:15

обратите внимание, чтоstreamlit здесь неправильный тег, он должен быть помечен запросами; вот в чем твоя проблема.

UpAndAdam 09.04.2024 19:18

вы не предоставили ожидаемый ввод и вывод. рефакторинг в минимальный воспроизводимый пример. streamlit не является фактором вашей проблемы, вы можете иметь жестко запрограммированный список, чтобы продемонстрировать проблему и высмеивать все элементыstreamlit, и ваша проблема все равно будет присутствовать

UpAndAdam 10.04.2024 19:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема выглядит так, будто у вас неправильный URL-адрес. Посмотрите на URL-адрес, который они отображают, но это не удалось.

Превышено максимальное количество повторов для URL: /api/fruit/watermelonElderberry (Вызвано NameResolutionError("<urllib3.connection.HTTPSConnection объект по адресу 0xffff79c51400>: не удалось разрешить «fruityvice.com» ([Errno -3] Временный сбой в разрешении имен))))

URL-адрес выглядит неправильно. /api/fruit/armelonEldererries ?

Обновление
Теперь, когда вы исправили свой URL-адрес, вам нужно учитывать возможность того, что пользователь попросит фрукт, которого нет в базе данных фруктов веб-сайта. Что мешает пользователю, например, попросить «тако»? Перед обработкой необходимо убедиться, что предмет найден.

Проблемы на самом деле не имеют ничего общего с streamlit, а связаны с использованием вами модуля request.

да, я исправил это, но все равно не получаю желаемого результата и застрял

Aman Chaudhur 10.04.2024 17:01

перейдите по URL-адресу самостоятельно и посмотрите, что он отображает, это то, что получит ваш код

UpAndAdam 10.04.2024 19:25

Проблему решил спасибо за помощь

Aman Chaudhur 10.04.2024 22:12

если мой совет был полезен, пожалуйста, проголосуйте за него или примите мой ответ.

UpAndAdam 10.04.2024 23:33

Другие вопросы по теме