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

Streamlit中st.session_state初始化报错问题求助

Streamlit session_state 初始化问题排查

我写了一段Streamlit示例代码,两次尝试设置st.session_state的locale属性,但运行时一直报错:

AttributeError: st.session_state has no attribute "locale". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization

示例代码

import streamlit as st
from dataclasses import dataclass

@dataclass
class Locale:
    ai_role_prefix: str


# --- LOCALE SETTINGS ---
en = Locale(
    ai_role_prefix="base",
)

if 'locale' not in st.session_state:
    st.session_state.locale = en

if __name__ == "__main__":
    st.session_state.locale = en
    print(st.session_state.locale.ai_role_prefix)

完整报错堆栈

C:\Users\dex\mambaforge\python.exe C:/Users/dex/Desktop/gpt4free/AudioChatGPT/src/chat_ui/temp.py
2023-05-12 22:43:37.715 WARNING streamlit.runtime.state.session_state_proxy: Session state does not function when running a script without `streamlit run`
Traceback (most recent call last):
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state.py", line 370, in __getitem__
    return self._getitem(widget_id, key)
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state.py", line 415, in _getitem
    raise KeyError
KeyError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state_proxy.py", line 119, in __getattr__
    return self[key]
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state_proxy.py", line 90, in __getitem__
    return get_session_state()[key]
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\safe_session_state.py", line 113, in __getitem__
    return self._state[key]
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state.py", line 372, in __getitem__
    raise KeyError(_missing_key_error_message(key))
KeyError: 'st.session_state has no key "locale". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\dex\Desktop\gpt4free\AudioChatGPT\src\chat_ui\temp.py", line 22, in <module>
    print(st.session_state.locale.ai_role_prefix)
  File "C:\Users\dex\mambaforge\lib\site-packages\streamlit\runtime\state\session_state_proxy.py", line 121, in __getattr__
    raise AttributeError(_missing_attr_error_message(key))
AttributeError: st.session_state has no attribute "locale". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization

Process finished with exit code 1

问题原因及解决方法

核心原因

报错堆栈里的警告已经点明关键:Session state does not function when running a script without streamlit run。

  • Streamlit的session_state是为Web应用会话设计的,只有通过streamlit run命令启动脚本时,才会初始化完整的会话环境,session_state才能正常工作。
  • 直接用Python解释器执行脚本(python temp.py)时,session_state的底层机制未被激活,无法正确检测和设置属性,导致初始化逻辑失效。

解决方法

  1. 使用正确的启动命令
    在终端中执行:

    streamlit run temp.py
    
  2. 优化代码结构
    将session_state的初始化逻辑放到主入口块中,确保仅在Streamlit运行环境下执行:

    import streamlit as st
    from dataclasses import dataclass
    
    @dataclass
    class Locale:
        ai_role_prefix: str
    
    # --- LOCALE SETTINGS ---
    en = Locale(
        ai_role_prefix="base",
    )
    
    if __name__ == "__main__":
        # 仅在Streamlit运行时初始化session_state
        if 'locale' not in st.session_state:
            st.session_state.locale = en
        print(st.session_state.locale.ai_role_prefix)
        # 添加Streamlit组件验证效果
        st.write("当前locale前缀:", st.session_state.locale.ai_role_prefix)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:37:11