Search code examples
pythonattributeerrorstreamlit

How to properly set st.session_state in streamlit


So I have such sample code. As you can see locale setted twice. However I keep getting error:

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

What is wrong here?

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)

Full error stack:

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

Solution

  • Note the first part of the warning:

    WARNING streamlit.runtime.state.session_state_proxy:
    Session state does not function when running a script without `streamlit run`
    

    This indicates the script was executed as a normal Python script rather than through the streamlit package.

    To run your script as a streamlit app, type in your terminal streamlit run your_app.py or streamlit run path/your_app.py if you are not located in the same directory as your file.

    If for any reason there is still a problem, you can use the more verbose python -m streamlit run your_app.py