Pandas数据切片函数异常处理问题:输入非整数后程序崩溃
DataFrame切片函数的问题修复
问题描述
这段函数用于对Pandas DataFrame进行切片,用户输入行、列的范围字符串(格式如x:x),程序拆分后转成整数传给iloc。但输入非整数内容时,虽然ValueError被捕获,程序还是会因为row_from等变量未定义而崩溃;同时while True循环没起到重复提示输入的作用,错误输入后直接退出循环。
问题根源
- 异常后代码继续执行:
except块只打印提示,但后续的iloc切片和return语句依然会执行。此时row_from/row_to/column_from/column_to可能未完成赋值,导致iloc调用报错。 - 循环提前终止:
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
相关产品推荐
相关产品推荐

