在Python脚本中访问Streamlit session_state时出现KeyError,即使已初始化session_state变量
我在用Python写脚本时,想访问Streamlit的session_state,但遇到了一个KeyError错误,尽管我已经初始化了session_state变量。以下是我的代码:
import streamlit as st
def main():
if "show_text" not in st.session_state.keys():
st.session_state["show_text"] = False
st.markdown("# My App")
if st.button("Show text!"):
st.session_state["show_text"] = True
if st.session_state["show_text"] is True:
st.markdown("Lorem ipsum...")
if __name__ == "__main__":
main()
运行这个脚本时,我收到了以下错误信息:
KeyError: 'st.session_state has no key "show_text". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization'
当我在浏览器中打开这个应用时,它能正常工作。不过,在我第一次运行Python脚本以获取启动应用的命令时,这个错误信息让我很烦恼。我很困惑,因为我已经按照代码中的方式初始化了session_state。希望能得到一些关于这个错误可能原因的见解,非常感谢。
我仔细查看了错误信息中提供的文档,并尝试了几种解决方案,但遗憾的是都没有解决这个问题。我确保按照建议初始化了session_state变量,但KeyError依然存在。任何进一步的指导或其他解决方案都将非常感激。谢谢你的帮助!
更新:
如果我在终端中启动以下示例,就不会收到错误信息。我想知道为什么在第一个示例中会出现这个错误,而在这个示例中却没有。
import streamlit as st
def main():
if "show_text" not in st.session_state.keys():
st.session_state["show_text"] = False
st.markdown("# My App")
if st.button("Show text!"):
st.write(st.session_state["show_text"])
if __name__ == "__main__":
main()
1 个回答
0
在错误信息的最上面,肯定有一个警告,告诉你为什么用 streamlit run your_script.py
启动时能正常工作,而用 python your_script.py
启动时却不行:
WARNING streamlit.runtime.state.session_state_proxy: Session state does not function when running a script without `streamlit run`
这就是你的答案。