#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. Большое спасибо!