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

如何确认CSV或通用文件已加载至Python脚本?代码报错排查

解决交互式菜单中文件加载状态判断的问题

我来帮你搞定这个问题——你的代码目前有两个关键问题:变量作用域导致的filename未定义错误,以及错误地用sys.modules判断数据是否加载。咱们一步步修正:

核心问题分析

  1. 变量作用域问题:filename是在choice == 1的while循环内部定义的,如果用户一开始就选choice == 2,这个变量根本没被创建,自然会报错。
  2. 判断逻辑错误:sys.modules是用来存储Python已导入的模块的,和你加载的CSV数据完全没关系,用它判断数据是否加载完全不对。

正确的解决方案

我们可以通过初始化一个全局状态变量来跟踪数据是否成功加载,而不是依赖文件名。这里用loaded_data(初始值为None)来存储加载后的DataFrame,只要它不为None,就说明数据已有效加载。

修改后的完整代码示例

import os
import pandas as pd
import sys

# 初始化数据加载状态:None表示未加载
loaded_data = None
filename = None  # 提前初始化filename,避免作用域问题

while True:
    # 显示菜单
    print("\n=== 交互式菜单 ===")
    print("1. 加载CSV数据")
    print("2. 检查数据错误")
    print("3. 退出")
    choice = int(input("请输入选择(1-3):"))

    if choice == 1:
        while True:
            filename = input("请输入CSV文件名:")
            # 检查文件是否存在于当前目录
            if os.path.exists(filename):
                try:
                    # 尝试加载CSV,捕获可能的格式错误
                    loaded_data = pd.read_csv(filename)
                    print("\n数据已成功加载!")
                    break
                except pd.errors.EmptyDataError:
                    print("\n错误:文件是空的,请选择其他文件。")
                except pd.errors.ParserError:
                    print("\n错误:文件不是有效的CSV格式,请检查。")
                except Exception as e:
                    print(f"\n加载失败:{str(e)}")
            else:
                print("\n文件不存在,请重新输入。")
    
    elif choice == 2:
        # 通过loaded_data判断是否已加载有效数据
        if loaded_data is None:
            print("请先加载数据文件!")
        else:
            # 这里写你的错误检查逻辑
            print("开始检查数据错误...")
            # 示例:检查缺失值
            missing_values = loaded_data.isnull().sum().sum()
            print(f"数据中共有{missing_values}个缺失值")
    
    elif choice == 3:
        print("退出程序。")
        break
    
    else:
        print("无效选择,请输入1-3之间的数字。")

关键改动说明

  • 状态变量loaded_data:用它存储加载后的DataFrame,初始为None,加载成功后赋值为实际数据。后续所有需要依赖已加载数据的操作,都通过判断loaded_data is not None来确认。
  • 提前初始化filename:在菜单循环前定义filename = None,避免用户未选1就选2时出现未定义错误。
  • 增加异常捕获:在加载CSV时捕获EmptyDataError、ParserError等异常,确保即使文件存在,也能处理无效CSV的情况,保证loaded_data只在数据有效时才被赋值。
  • 替换错误的判断逻辑:去掉sys.modules的错误用法,改用loaded_data的状态来判断,这才是真正可靠的方式——因为文件名存在不代表数据加载成功(比如文件损坏、格式错误)。

额外建议

  • 如果需要支持通用文件(不止CSV),可以扩展加载逻辑,根据文件后缀调用不同的加载函数(比如pd.read_excel处理Excel文件),但核心思路还是用loaded_data来跟踪加载状态。
  • 可以把文件加载逻辑封装成单独的函数,让代码更模块化,比如:
def load_file(file_path):
    if not os.path.exists(file_path):
        return None, "文件不存在"
    try:
        if file_path.endswith(".csv"):
            data = pd.read_csv(file_path)
        elif file_path.endswith(".xlsx"):
            data = pd.read_excel(file_path)
        else:
            return None, "不支持的文件格式"
        return data, None
    except Exception as e:
        return None, f"加载失败:{str(e)}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:42