Подстановка выражения на условное выражение

Следуя "Принципу самураев", я пытаюсь сделать это по своим функциям, но, похоже, неправильно...

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 раньше.