Подстановка выражения на условное выражение
Следуя "Принципу самураев", я пытаюсь сделать это по своим функциям, но, похоже, неправильно...
return <value> if <bool> else raise <exception>
Есть ли другой "красивый" способ сделать это? Благодаря
Ответы
Ответ 1
Inline/trernary if
- выражение, а не оператор. Ваша попытка означает "если bool, return value, else return result of raise expression
" - это, конечно, нонсенс, потому что raise exception
сам является выражением, а не выражением.
Нет никакого способа сделать это inline, и вы не должны этого хотеть. Сделайте это явно:
if not bool:
raise MyException
return value
Ответ 2
Если вы абсолютно хотите raise
в выражении, вы можете сделать
def raiser(ex): raise ex
return <value> if <bool> else raiser(<exception>)
Это "пытается" вернуть возвращаемое значение raiser()
, которое было бы None
, если в функции не было безусловного raise
.
Ответ 3
Мне нравится делать это с утверждениями, поэтому вы подчеркиваете, что этот член должен быть, как контракт.
>>> def foo(self):
... assert self.value, "Not Found"
... return self.value
Ответ 4
Ну, вы можете проверить для bool отдельно:
if expr: raise exception('foo')
return val
Таким образом, вы могли бы проверить expr
раньше.