Ошибка утверждения, когда строки ошибок совпадают в UnitTest?

#python #error-handling #python-unittest #f-string

Вопрос:

Класс, который я создал , использует переменную для представления точки в 3D-пространстве, например point = [x, y, z] , я проверяю, что эта точка имеет правильную длину, чтобы убедиться, что она 3D, и выдаю ошибку, если это не так:

 if len(point) != 3:
        raise ValueError(f"Point: {point}, is not 3D.")
 

В настоящее время я тестирую класс, и когда я намеренно передаю 2D-точку: point = [1, 1] , я получаю строку ошибки:

 "Point: [1, 1], is not 3D."
 

Но когда я сравниваю его с помощью:

 self.assertRaisesRegex(
        ValueError, "Point: [1, 1], is not 3D.",
        edits.Cut, 'p', [1, 1], plane=[1, 1, 1])
 

Я получаю исключение ошибки утверждения:

 AssertionError: "Point: [1, 1], is not 3D." does not match "Point: [1, 1], is not 3D."
 

Мне это кажется довольно странным, учитывая, что струны точно такие же. Я сравнил строку f с ожидаемой строкой за пределами assertRaiseRegex(...) и подтвердил, что они одинаковы.

Похоже, что строка f не имеет к этому никакого отношения , даже если я запишу строку возврата ошибки как: raise ValueError("Point: [1, 1], is not 3D.") , я все равно получу ту же ошибку. Это как — то связано с обработкой UnitTest форматов, подобных списку, в строках?

Комментарии:

1. Вы должны избегать символов, которые имеют особое значение в регулярном выражении, например, вам нужно что-то вроде r"Point: [1, 1], is not 3D." перехода assertRaisesRegex . Как следует из названия, строка обрабатывается как регулярное выражение.

2. Большое спасибо!