Пожалуйста, выслушай меня. Я знаю, как работает assert
.
Для контекста, некоторые приложения и способы использования, которые я имею в виду, включают математическую оптимизацию через GUI, поэтому функции можно вызывать сотни миллионов раз.
Оператор assert
отключен в оптимизированном режиме (-O
), поэтому считается плохой практикой (читай: capital sin ) полагаться на него, по мнению большинства людей (может быть, это более чем мнение, я не знаю).
Скажем, у меня есть следующая функция, которая вычисляет площадь круга:
def area_circle(r):
return 3.141592654 * (r**2)
Да, я знаю, нет строк документации. Это игрушечный пример. Чтобы убедиться, что radius
является либо int
, либо float
, я бы сделал следующее:
def area_circle(r):
assert isinstance(r, (int, float), 'TypeError: Expected int or float, not ' + type(r).__name__
return 3.141592654 * (r**2)
Возможно, мое мнение должно быть публично исполнено, потому что я вижу это как удобная функция, которая позволяет мне выполнять некоторую проверку ввода и тому подобное во время разработки, но затем, когда я достигаю состояния готовности к работе, я могу просто отключить эти ненужные части кода в оптимизированном режиме. Если мои системные тесты охватывают рабочие процессы, которые приводят к использованию area_circle
, то я лично не хочу видеть raise
операторов, потому что они просто бесполезны.
Так, как я могу сделать интегрированный системное тестирование таким образом, чтобы не замедлять работу приложения без использования assert
?
РЕДАКТИРОВАТЬ 1
Вот две дополнительные части информации, которые необходимо учитывать:
- Внешних источников данных нет, все поступает из GUI;
- Проверка ввода выполняется непосредственно в GUI