下面的代码是导入文件模块的一部分。函数切片传递了从 .csv 文件导入的 pandas 数据帧。用户将行和列切片作为字符串输入,然后将其拆分并转换为整数并传递到 my_data_frame.iloc 进行切片。如果用户输入整数,代码将产生预期结果;如果输入其他字符(例如字母), int() 会引发 ValueError ,该错误会被 Expect 块捕获。但是,由于字符输入而未定义 .iloc 中的局部变量,因此程序崩溃。我认为虽然一开始的 True 会提示重新输入,直到输入整数,但这并没有发生。有任何想法吗?一整天都尝试了很多。
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):")
row_parts = row_slice.split(":")
column_parts = column_slice.split(":")
row_from = int(row_parts[0]) if row_parts[0] else None
row_to = int(row_parts[1]) if row_parts[1] else None
column_from = int(column_parts[0]) if column_parts[0] else None
column_to = int(column_parts[1]) if column_parts[1] else None
except ValueError:
print("Please enter integer:")
my_data = my_data_frame.iloc[row_from:row_to, column_from:column_to]
return my_data
您的 while 循环旨在提示输入数据,直到用户正确输入为止。这时你应该停下来并进行下面的计算。我添加了一个中断并减少了下一个计算,使其位于循环之外。请注意,如果最终计算也失败,您可能需要添加更多错误检测。
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):")
row_parts = row_slice.split(":")
column_parts = column_slice.split(":")
row_from = int(row_parts[0]) if row_parts[0] else None
row_to = int(row_parts[1]) if row_parts[1] else None
column_from = int(column_parts[0]) if column_parts[0] else None
column_to = int(column_parts[1]) if column_parts[1] else None
break
except ValueError:
print("Please enter integer:")
my_data = my_data_frame.iloc[row_from:row_to, column_from:column_to]
return my_data