在输入()之后捕获异常后变量未定义

问题描述 投票:0回答:1

下面的代码是导入文件模块的一部分。函数切片传递了从 .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
python exception input integer
1个回答
0
投票

您的 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
© www.soinside.com 2019 - 2024. All rights reserved.