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
相关产品推荐
相关产品推荐

