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

Pandas数据切片函数异常处理问题:输入非整数后程序崩溃

DataFrame切片函数的问题修复

问题描述

这段函数用于对Pandas DataFrame进行切片,用户输入行、列的范围字符串(格式如x:x),程序拆分后转成整数传给iloc。但输入非整数内容时,虽然ValueError被捕获,程序还是会因为row_from等变量未定义而崩溃;同时while True循环没起到重复提示输入的作用,错误输入后直接退出循环。

问题根源

  1. 异常后代码继续执行:except块只打印提示,但后续的iloc切片和return语句依然会执行。此时row_from/row_to/column_from/column_to可能未完成赋值,导致iloc调用报错。
  2. 循环提前终止:return语句在while True循环内部,不管输入是否正确,第一次循环结束后就会直接返回,循环无法重复执行。

修复方案

  • 将iloc切片和return逻辑移到try块内,确保只有输入验证通过时才执行切片并返回结果。
  • 捕获异常后,使用continue让循环回到开头,重新提示用户输入。
  • 额外处理输入格式错误(比如输入不是x:x格式,拆分后元素数量不对),避免索引访问报错。

修正后的代码

def slice_data(my_data_frame):
    while True:
        try:
            row_slice = input("Enter row indexes to be kept (x:x):")
            column_slice = input("Enter column indexes to be kept (x:x):")
            
            # 处理行切片格式,确保是x:x结构
            row_parts = row_slice.split(":")
            if len(row_parts) != 2:
                raise ValueError("Row input must be in 'x:x' format")
            row_from = int(row_parts[0]) if row_parts[0] else None
            row_to = int(row_parts[1]) if row_parts[1] else None
            
            # 处理列切片格式,确保是x:x结构
            column_parts = column_slice.split(":")
            if len(column_parts) != 2:
                raise ValueError("Column input must be in 'x:x' format")
            column_from = int(column_parts[0]) if column_parts[0] else None
            column_to = int(column_parts[1]) if column_parts[1] else None
            
            # 验证通过后执行切片并返回
            my_data = my_data_frame.iloc[row_from:row_to, column_from:column_to]
            return my_data
        except ValueError as e:
            print(f"Invalid input: {e}. Please try again.")
            # 回到循环开头重新输入
            continue

内容的提问来源于stack exchange,提问作者Dr. H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:16:19