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的底层机制未被激活,无法正确检测和设置属性,导致初始化逻辑失效。
解决方法
使用正确的启动命令
在终端中执行:streamlit run temp.py优化代码结构
将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
相关产品推荐
相关产品推荐

