`
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))
我尝试使用网上提供的各种方法来修复它,但没有一个对我有用。`
问题是您在第 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
我也遇到同样的错误。密钥错误: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')