Streamlit未输入文件名时触发FileNotFoundError报错问题求助
问题根因
Streamlit 每次页面初始化、用户触发交互时都会从上到下重跑整段脚本。当用户还没在输入框填内容时,st.text_input 会返回空字符串,此时拼接出的文件路径为 M:/Desktop/AutomationProject/.csv,这个路径下本来就没有对应文件,pandas 调用read_csv时自然会抛出 FileNotFoundError。另外你原代码里filepath = M:/Desktop/AutomationProject/没给路径值加字符串引号,本身也存在语法错误,运行时会直接报错。
修复方案
核心是加一层空值判断,只有当用户输入了有效文件名时,才执行读文件、数据清洗制表的逻辑,修复后的可运行代码如下:
import streamlit as st import pandas as pd import os # 路径值必须加字符串引号 base_filepath = "M:/Desktop/AutomationProject/" input_filename = st.text_input("Please type in your Autocall File Name (GBP)") # 去除输入前后的空白字符,判断是否为有效输入 if input_filename.strip(): # 用os.path.join拼接路径,自动适配不同操作系统的路径分隔符 full_path = os.path.join(base_filepath, f"{input_filename.strip()}.csv") # 额外加文件存在校验,给用户友好提示而不是抛原生报错 if not os.path.exists(full_path): st.error(f"文件不存在,请检查文件名是否输入正确,当前查找路径:{full_path}") else: # 读文件、后续清洗制表逻辑都放在这个有效分支里 express_gbp = pd.read_csv(full_path) st.write('Saved!') else: st.info("请输入需要处理的CSV文件名后继续操作")
可选优化点
- 不要直接用字符串加号拼接路径,用
os.path.join()可以避免Windows、macOS/Linux系统路径斜杠不兼容的问题 - 对用户输入做
strip()处理,避免用户不小心输入前后空格导致找不到文件 - 增加文件存在性校验,替代原生的Traceback报错,普通用户更容易理解问题出在哪
- 如果需要更友好的文件选择交互,可以替换
st.text_input为st.file_uploader组件,直接让用户上传文件,省去手动输入文件名的步骤,从根源避免输错文件名的问题
内容的提问来源于stack exchange,提问作者Alfie Davies
相关产品推荐
相关产品推荐

