Явное или неявное еще после того, как условия успешно? - PullRequest
0 голосов
/ 31 марта 2020

У меня часто есть методы в моих API, у которых есть условия перед выполнением предполагаемой работы. Эти проверки (обычно) приводят к исключению, определяющему c для API (не генерируется пользователем, таким как предоставление строки методу, использующему float). Они принимают следующую форму:

if condition_1:
    raise APIException('Msg 1')
elif condition_2:
    raise APIException('Msg 2')
...
elif condition_n:
    raise APIException('Msg n')
else:
    # do work

Все условные выражения могут быть выполнены до начала любой работы и никогда не зависят от того, были ли они выполнены ранее. Если какое-либо исключение генерируется во время части else, это происходит из-за неправильного использования метода.

Посмотрев на эти методы и увидев эту структуру в моих API, я начал задаваться вопросом: это проблема стилистического подхода c или нет? То есть, должен ли я оставить это так, чтобы было явно указано, что часть else означает «все проверки пройдены, теперь начинаются», или удалите ее, сделав ее неявной:

if condition_1:
    raise APIException('Msg 1')
elif condition_2:
    raise APIException('Msg 2')
...
elif condition_n:
    raise APIException('Msg n')
# do work

Далее, учитывая, что каждое условное выражение приостанавливает выполнение функции до начала работы, является ли стек if-elif еще одной стилистической проблемой c подхода? То есть я должен просто использовать if или оставить elif:

if condition_1:
    raise APIException('Msg 1')
if condition_2:
    raise APIException('Msg 2')
...
if condition_n:
    raise APIException('Msg n')
# do work

Из дзен Python я бы сказал, что if-elif-else означает «Явный лучше, чем неявный», так что может ответить сам, но с точки зрения идиоматизма c, действительно ли последующие if против if-elif действительно изменяют читаемость / ремонтопригодность кода? Это подразумевает, что несколько условий могут возникать одновременно, поэтому я предпочитаю if-elif, потому что только одно вызывает приостановку функции. Я не верю, что любая из этих форм влияет на производительность.

...