Это хороший питонический способ проверить что-то на равенство и поймать исключения в другом?
try:
# Check for equality
debug.assert_eq(data, None)
debug.assert_eq(id, None)
debug.assert_eq(time, None)
debug.assert_eq(group, None)
except Exception:
print("OK")
else:
raise Exception('None found')
ну в этом есть смысл
Чего должен достичь тест? Это максимум один из этих 4 значений не является None
? Или что хотя бы один не None
? Почему не просто подсчитайте значения None
?
Нет. На самом деле вы не можете «проверить что-то на равенство» — вам нужны ДВЕ вещи, чтобы одна могла быть равна другой. Хороший Pythonic способ — использовать оператор ==. Если вы проверяете, является ли переменная None, используйте оператор is
: if x is None
.
Ваша логика довольно... запутана. Если вы хотите проверить, не является ли хотя бы один этих переменных None
, используйте any()
:
debug.assert(any(v is not None for v in (data, id, time, group)))
any()
перебирает выражение генератора v is not None for v in (data, id, time, group)
и возвращает True
в тот момент, когда встречается True
результат. Это означает, что если data
не None
, то остальные 3 значения не проверяются. Если, однако, все 4 значения равны None
, то any()
возвращает False
и проверка утверждения не пройдена.
Я не знаю, какую структуру вы используете для проверки утверждений, я предполагал, что будет метод .assert()
.
При перехвате исключения ошибки утверждения я бы нет перехватывал Exception
, это слишком широко и будет маскировать ошибки. Платформа тестирования будет вызывать определенные исключения, чтобы сигнализировать об ошибке утверждения, например, встроенный AssertionError
. Вместо этого поймайте это конкретное исключение, если необходимо.
почему бы вам не перевернуть свою логику и вместо этого проверить не равенство?