You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:17:58