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

Streamlit嵌套按钮使用Session State报错求助

问题解决方法

报错原因

你遇到的StreamlitAPIException是因为按钮的key与session_state中的变量名重名,且Streamlit禁止通过st.session_state直接设置st.button这类组件的状态值。原代码中st.button('RECOMMEND', key='rec_btn')的key和st.session_state.rec_btn同名,触发了这个限制。

修正后的代码

import re
# 假设tf_idf_vectorizer和model_sentiment已提前定义
# 假设output_images、output_names是已准备好的推荐数据

# 初始化session_state,使用与按钮key不同的变量名
if 'show_recommendations' not in st.session_state:
    st.session_state.show_recommendations = False
if 'review_submitted' not in st.session_state:
    st.session_state.review_submitted = False

# 点击RECOMMEND按钮后,标记需显示推荐内容
if st.button('RECOMMEND', key='recommend_btn'):
    st.session_state.show_recommendations = True
    st.session_state.review_submitted = False  # 重置提交状态

# 根据状态判断是否显示推荐内容
if st.session_state.show_recommendations:
    col1, col2, col3 = st.columns(3)
    
    with col1:
        st.image(output_images[0])
        st.markdown(output_names[0].upper())
        # 未提交影评时显示输入框和提交按钮
        if not st.session_state.review_submitted:
            review = st.text_input(f"How much you liked the movie {output_names[0]}")
            if st.button('submit', key='submit_btn'):
                # 清洗影评文本
                cleaned_review = re.sub('[^a-zA-Z0-9 ]','', review)
                # 情感分析处理
                review_vector = tf_idf_vectorizer.transform([cleaned_review])
                ans = model_sentiment.predict(review_vector)
                # 生成反馈文本
                feedback = 'Thanks for your positive review' if ans == 0 else 'Sorry for your negative review'
                st.write(feedback)
                # 标记影评已提交,避免重复处理
                st.session_state.review_submitted = True

关键修改点

  • 分离命名避免冲突:将控制推荐显示的状态变量命名为show_recommendations,按钮key改为recommend_btn,彻底规避命名冲突问题。
  • 状态持久化:通过session_state记录推荐内容的显示状态,确保页面刷新后推荐内容不会消失。
  • 提交状态控制:新增review_submitted变量,防止用户重复提交影评,提交后自动锁定提交逻辑。
  • 逻辑拆分:让RECOMMEND按钮仅负责切换显示状态,submit按钮专注处理影评提交,代码逻辑更清晰。

内容的提问来源于stack exchange,提问作者Tushar Nautiyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:21:00