ошибки тестирования: сравнение 2 файлов - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть 5 функций, работающих относительно

1- singleline_diff (line1, line2)

сравнение 2 строк в одном файле

Входы: line1 - первая однострочная строка line2 - вторая однострочная строка Выход: Индекс первой разницы между двумя строками идентичны, если две строки совпадают.

2- singleline_diff_format (line1, line2, idx):

сравнение 2 строк в одном файле

Входы: line1 - первая однострочная строка line2 - вторая однострочная строка idx - индекс, по которому нужно указать разницу (от 1-й функции) Выход: 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- multiline_diff (lines1, lines2):

иметь дело с двумя списками строк

Входы: lines1 - список однострочных строк lines2 - список однострочных строк Выход: кортеж, содержащий номер строки (начиная с 0) и индекс в той строке, где первое различие между строками1 и линии2 происходит. Возвращает (IDENTICAL, IDENTICAL), если два списка совпадают.

4-get_file_lines (имя файла) Входы: filename - имя файла для чтения Выход: список строк из файла с именем filename. Если файл не существует или не читается, то поведение этой функции не определено.

5- file_diff_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 Ответ

0 голосов
/ 27 апреля 2018

Если один из файлов пуст, либо file1, либо file2 должен быть пустым списком, так что попытка получить доступ к элементу любого из них приведет к описанной вами ошибке.

Ваш код проверяет, чтобы эти файлы были пустыми при присвоении line_file_`` and line_file_2`, но затем идет дальше и пытается получить доступ к элементам обоих.

...