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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:48:04