在Python脚本中访问Streamlit session_state时出现KeyError,即使已初始化session_state变量

0 投票
1 回答
44 浏览
提问于 2025-04-14 17:27

我在用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`

这就是你的答案。

撰写回答