Поднимите ValueError
с помощью полезного сообщения в блоке else
,
raise ValueError('x must be in [0, {}]'.format(L))
например. Вы также можете создать пользовательское DomainError
наследование от ValueError
class DomainError(ValueError):
pass
и поднять это.
В других частях вашего кода вы просто вызываете u
и ловите потенциальные исключения, следуя принципу EAFP .
редактировать :
Если вам нужна проверка домена для ряда математических функций, вы также можете написать простую фабрику декораторов. Вот пример, в зависимости от ваших вариантов использования вам может потребоваться выполнить некоторые незначительные изменения.
def domain(lower, upper):
def wrap(f):
def f_new(x):
if not lower <= x <= upper:
raise ValueError('x must be in [{}, {}]'.format(lower, upper))
return f(x)
return f_new
return wrap
Демо-версия:
>>> @domain(0, 10)
...:def f(x):
...: return x + 1
...:
...:
>>> f(2)
>>> 3
>>> f(-1)
[...]
ValueError: x must be in [0, 10]
>>> f(10.1)
[...]
ValueError: x must be in [0, 10]