У меня есть некоторые вычислительные функции для конфигураций для программного обеспечения, которое будет управлять аппаратной настройкой. В некоторых случаях пользователь может вводить недопустимые значения конфигурации. Я обрабатываю это, бросая исключение, если используются недопустимые значения, или просто возвращаю мое расчетное значение, если конфигурация работает:
def calc_exhale_dur(breath_rate, inh_dur, breath_hold_dur):
"""Calculate exhalation duration.
Args:
breath_rate (float): animal breath rate (br/min)
inh_dur (float): animal inhalation duration (ms)
breath_hold_duration (float): animal breath hold duration (ms)
"""
single_breath_dur = calc_breath_dur(breath_rate)
exhale_dur = single_breath_dur - (inh_dur + breath_hold_dur)
if (inh_dur + breath_hold_dur + exhale_dur) > single_breath_dur:
raise error.ConfigurationError
elif exhale_dur <= 0:
raise error.ConfigurationError
else:
return exhale_dur
Считается ли это плохой практикой? Всегда ли нужно иметь какое-то действительное возвращаемое значение, если для начала есть возвращаемое значение? Я пытаюсь узнать, как лучше писать код Pythonic, все еще удовлетворяя потребности моих вычислительных методов.
Целью создания исключения является предоставление альтернативной точки выхода в случае, когда действительное возвращаемое значение не может быть найдено. Вы используете исключения точно так, как они предназначены.
Тем не менее, я бы, вероятно, проверял, не является ли exhale_dir
неположительным первым, что избавит вас от выполнения вычисления с недопустимым значением.
if exhale_dur <= 0:
raise error.ConfigurationError
elif (inh_dur + breath_hold_dur + exhale_dur) > single_breath_dur):
raise error.ConfigurationError
# You can also omit the else, since the only way to reach this point
# is to *not* have raised an exception. This is a matter of style, though.
return exhale_dur
Нет. Исключения либо обрабатываются в куске кода, либо бросаются, и оставляют его вызывающему, чтобы решить, что с ними делать. Если вы что-то вернете, вам нужно выбрать первый вариант. Вы выбрали второе. Делает совершенный смысл. Что вся идея выбросить исключение