我有5个相对工作的功能
1- singleline_diff(line1,line2)
输入: line1 - 第一个单行字符串 line2 - 第二个单行字符串 输出: 两条线之间的第一个差异的指数 如果两条线相同则相同。
2- singleline_diff_format(line1,line2,idx):
输入: 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开始)和 该行中的索引是lines1之间的第一个区别 和lines2出现。 如果两个列表相同,则返回(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)))
答案 0 :(得分:0)
如果其中一个文件为空,则file1
或file2
应为空列表,因此尝试访问其中任何一个元素都会导致您描述的错误。
您的代码在分配给line_file_`` and
line_file_2`时检查这些文件是否为空,但是继续尝试访问两者的元素。