代码之家  ›  专栏  ›  技术社区  ›  Aya Ghorabah

测试错误:比较2个文件

  •  -1
  • Aya Ghorabah  · 技术社区  · 6 年前

    我有5个功能相对工作

    1-单线/U差异(第1行、第2行)

    比较一个文件中的两行

    输入: line1-第一个单行字符串 line2-第二个单行字符串 输出: 两行之间第一个差的索引 如果两行相同,则相同。

    2-singleline\u diff\u格式(line1、line2、idx):

    比较一个文件中的两行

    输入: line1-第一个单行字符串 line2-第二个单行字符串 idx-指示差异的索引(从第一个函数) 输出: abcd(第一行) ==^(=表示相同字符,^表示差异) abef(第二行)

      If either input line contains a newline or carriage return, 
      then returns an empty string.
      If idx is not a valid index, then returns an empty string.
    

    3-多行差异(lines1、lines2):

    处理两行列表

    输入: lines1-单行字符串列表 lines2-单行字符串列表 输出: 包含行号(从0开始)和 该行中的索引,其中行1之间的第一个差异 并出现第2行。 如果两个列表相同,则返回(相同,相同)。

    4-get\u file\u行(文件名) 输入: filename—要读取的文件名 输出: 名为filename的文件中的行列表。 如果文件不存在或不可读,则 此函数的行为未定义。

    5-file\u diff\u format(filename1,filename2)“有问题的函数”

    处理两个输入文件

    输入: filename1—第一个文件的名称 filename2—第二个文件的名称 输出: 显示第一个位置的四行字符串 由输入命名的两个文件之间的差异。

      If the files are identical, the function instead returns the
      string "No differences\n".
    
      If either file does not exist or is not readable, then the
      behavior of this function is undefined.
    

    测试功能: 在测试使用一个空文件之前,一切都会进行 它给了我“列表索引超出范围”

    这是我使用的代码

    def file_diff_format(filename1, filename2):
    
        file_1 = get_file_lines(filename1)
        file_2 = get_file_lines(filename2)
        mli_dif = multiline_diff(file_1, file_2)
        min_lens = min(len(file_1), len(file_2))
    
    
        if mli_dif == (-1,-1) :
            return "No differences" "\n" 
    
        else:
            diff_line_indx = mli_dif[0]
            diff_str_indx = int (mli_dif[1])
            if len(file_1) >= 0:
                line_file_1 = ""
            else:
                line_file_1 = file_1[diff_line_indx]
    
            if len(file_2) >= 0:
                line_file_2 = ""
            else:
                line_file_2 = file_2[diff_line_indx]
    
            line_file_1 = file_1[diff_line_indx]
            line_file_2 = file_2 [diff_line_indx]
    
            out_print = singleline_diff_format(line_file_1, line_file_2, diff_str_indx)
    
            return ( "Line {}{}{}".format ((diff_line_indx), (":\n"), (out_print)))
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Scott Hunter    6 年前

    如果其中一个文件为空,则 file1 file2 应为空列表,因此尝试访问其中一个的元素将导致您描述的错误。

    您的代码在分配给时检查这些文件是否为空 line_file_`` and line\u file\u 2',然后继续并尝试访问这两个元素。