You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit评论模块提交触发KeyError问题求助

Streamlit电影评论应用提交时触发KeyError:st.session_state无对应键

开发基于Streamlit的电影评论应用,尝试将用户提交的评论存入数据库,但点击提交按钮时触发KeyError,提示st.session_state has no key "yy",尝试多种在线方案未解决,相关代码及报错信息如下:

导入模块代码

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'))

Review页面核心代码

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)
        movie_rev = st.text_area("Write your review")

        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))

错误原因

误将表单输入变量的值作为st.session_state的键来访问,而非直接使用表单输入变量本身。比如用户输入用户名"yy"后,代码尝试访问st.session_state["yy"],但这个键从未在session_state中初始化,因此触发KeyError。

Streamlit的表单组件(如st.text_input、st.selectbox)会直接将用户输入的值返回给变量,不需要通过st.session_state二次获取。

解决方案

直接使用表单组件返回的变量值,移除多余的st.session_state[]包裹,同时注意避免覆盖全局变量:

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)
        movie_rev = st.text_area("Write your review")

        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
            # 直接使用变量本身,无需从session_state获取
            user = str(user_name_rev)
            selected_movie_str = str(selected_movie)  # 重命名避免覆盖全局movies变量
            rate = slider_val
            review = str(movie_rev)
            insert_review(user, selected_movie_str, rate, review)
            st.write("Your review is saved")

内容的提问来源于stack exchange,提问作者Yaagik Maurya 7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:50:29