使用Streamlit运行Web应用时出现AttributeError: __enter__错误
解决Streamlit中
AttributeError: __enter__错误 错误原因
st.tabs()返回的是标签页对象的列表,而非单个标签页对象。你直接将整个列表赋值给tab后使用with tab:语法,列表不支持上下文管理器(没有__enter__方法),因此触发该错误。
修正方案
从st.tabs()返回的列表中取出单个标签页对象即可,有两种写法:
- 写法1:通过解包获取单个标签页
- 写法2:通过索引取列表第一个元素
修正后的完整代码
import streamlit as st # 写法1:解包获取单个标签页 tab, = st.tabs(["My Todos"]) with tab: for index, todo in enumerate(todos): checkbox = st.checkbox(todo, key=todo) if checkbox: todos.pop(index) functions.write_todos(todos) del st.session_state[todo] st.experimental_rerun()
或者用索引写法:
import streamlit as st # 写法2:通过索引取第一个标签页 tab = st.tabs(["My Todos"])[0] with tab: for index, todo in enumerate(todos): checkbox = st.checkbox(todo, key=todo) if checkbox: todos.pop(index) functions.write_todos(todos) del st.session_state[todo] st.experimental_rerun()
说明
st.tabs()接收标签名称列表,返回对应数量的标签页对象列表。当只有一个标签时,必须取出列表中的唯一元素,才能用with语句进入该标签上下文,在其中渲染待办事项复选框等内容,实现预期效果。
内容的提问来源于stack exchange,提问作者Muhammad Dhikrullah
相关产品推荐
相关产品推荐

