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

Streamlit中text_input为空触发KeyError的条件判断问题

问题根因

st.text_input组件在用户未输入任何内容时,默认返回空字符串'',而非None。原判断逻辑仅校验输入值是否为None,空字符串会直接绕过校验传入后续取列逻辑,DataFrame中不存在名为空字符串的列,因此抛出KeyError: ''错误。

修复逻辑

调整准入判断规则,仅当全部条件满足时才执行列读取操作:

  • 已成功上传并解析Excel文件生成DataFrame
  • 两个文本输入框的内容去除首尾空格、换行等空白字符后,均为非空值
  • 用户输入的两个列名真实存在于DataFrame的列集合中,避免输错列名触发同类KeyError
修正后可运行代码
import numpy as np 
import pandas as pd
import streamlit as st

st.set_page_config(layout="wide")

# 导入文件组件
xlsx_file = st.sidebar.file_uploader('Import File', type = 'xlsx') 

# 变量名输入组件
Vec1Name = st.sidebar.text_input("First Variable Name")
Vec2Name = st.sidebar.text_input("Second Variable Name")

st.title('Data')
col1, col2 = st.columns((3,1))

if xlsx_file is not None:
    df = pd.read_excel(xlsx_file)
    col1.write(''' #### Dataframe''')
    col1.write(df)
    
    # 校验输入非空
    vec1_valid = isinstance(Vec1Name, str) and Vec1Name.strip()
    vec2_valid = isinstance(Vec2Name, str) and Vec2Name.strip()
    if vec1_valid and vec2_valid:
        col1_name = Vec1Name.strip()
        col2_name = Vec2Name.strip()
        # 校验列名存在
        if col1_name in df.columns and col2_name in df.columns:
            # 存储目标向量
            Vec1 = df[col1_name]
            Vec2 = df[col2_name]

            # 展示选中变量
            col2.write(''' #### Variables of Interest''')
            col2.write(df[[col1_name, col2_name]])
        else:
            col2.warning("输入的列名不存在,请检查表头后重新输入")

内容的提问来源于stack exchange,提问作者DDigits

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:45:35