KeyError:'st.session_state 在 Streamlit 中没有键

问题描述 投票:0回答:2

`

import streamlit as st
from streamlit_option_menu import option_menu
import json
from streamlit_lottie import st_lottie
import pickle
import requests
from db1 import insert_review, fetch_all_reviews, get_movie_review

movies = pickle.load(open('movie_list.pkl', 'rb'))
similarity = pickle.load(open('similarity.pkl', 'rb'))

`

`

if selected == "Review":
    st.title("Reviews")
    with st.form("my_form"):
        st.write("Type your Review")
        user_name_rev = st.text_input("User Name")
        movie_list = movies['title'].values
        selected_movie = st.selectbox(
            "Type or select a movie from the dropdown",
            movie_list
        )
        slider_val = st.slider("Rating", 1, 10)
        # st.write(f"{slider_val}")
        movie_rev = st.text_area("Write your review")

        #checkbox_val = st.checkbox("Form checkbox")

        submitted = st.form_submit_button("Submit")

        if "load_state" not in st.session_state:
            st.session_state.load_state = False


        if submitted or st.session_state.load_state:
            st.session_state.load_state = True
            user = str(st.session_state[user_name_rev])
            movies = str(st.session_state[selected_movie])
            rate = st.session_state[slider_val]
            review = str(st.session_state[movie_rev])
            insert_review(user, movies, rate, review)
            st.write("Your review is saved")

我试图将数据保存在数据库中,每当我单击“提交”时,它都会显示错误。

KeyError: 'st.session_state has no key "yy". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization' Traceback: File "c:\users\yaagik\pycharmprojects\pythonproject\venv\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 564, in _run_script exec(code, module.__dict__) File "C:\Users\YAAGIK\PycharmProjects\pythonProject\new_test.py", line 77, in <module> user = str(st.session_state[user_name_rev]) File "c:\users\yaagik\pycharmprojects\pythonproject\venv\lib\site-packages\streamlit\runtime\state\session_state_proxy.py", line 89, in __getitem__ return get_session_state()[key] File "c:\users\yaagik\pycharmprojects\pythonproject\venv\lib\site-packages\streamlit\runtime\state\safe_session_state.py", line 110, in __getitem__ return self._state[key] File "c:\users\yaagik\pycharmprojects\pythonproject\venv\lib\site-packages\streamlit\runtime\state\session_state.py", line 439, in __getitem__ raise KeyError(_missing_key_error_message(key))

我尝试使用网上提供的各种方法来修复它,但没有一个对我有用。`

python python-3.x streamlit
2个回答
2
投票

问题是您在第 77 行调用了“st.session_state[user_name_rev]”而没有对其进行初始化。

要初始化streamlit session_state,你可以这样做:

st.session_state['your_session_state_name'] = value_to_store

或者

if 'you_session_state_name' not in st.session_state:
    st.session_state.you_session_state_name = value_to_store

根据您的具体情况,您可以这样做:

if submitted or st.session_state.load_state:
    if 'user' not in st.session_state:
        st.session_state['user'] = user_name_rev
    user = str(st.session_state['user'])

对电影进行同样的操作,评分、评论,这可能会起作用。

参考资料: https://docs.streamlit.io/library/advanced-features/session-state


0
投票

我也遇到同样的错误。密钥错误:st.session_state 没有密钥。你能帮我解决这个错误吗?这是我的代码

st.title(“Langchain 聊天机器人”)

... 响应容器 = st.container()

textcontainer = st.container()

...

使用文本容器: query = st.text_input("查询:", key="输入") ... 与response_container:

if st.session_state['responses']:

    for i in range(len(st.session_state['responses'])):
        message(st.session_state['responses'][i],key=str(i))

        if i < len(st.session_state['requests']):

            message(st.session_state["requests"][i],is_user=True,key=str(i)+ '_user')
© www.soinside.com 2019 - 2024. All rights reserved.