raise statement on a conditional expression

心已入冬 提交于 2019-11-29 10:59:50

问题


Following "Samurai principle", I'm trying to do this on my functions but seems it's wrong...

return <value> if <bool> else raise <exception>

Is there any other "beautiful" way to do this? Thanks


回答1:


Inline/ternary if is an expression, not a statement. Your attempt means "if bool, return value, else return the result of raise expression" - which is nonsense of course, because raise exception is itself a statement not an expression.

There's no way to do this inline, and you shouldn't want to. Do it explicitly:

if not bool:
    raise MyException
return value



回答2:


If you absolutely want to raise in an expression, you could do

def raiser(ex): raise ex

return <value> if <bool> else raiser(<exception>)

This "tries" to return the return value of raiser(), which would be None, if there was no unconditional raise in the function.




回答3:


I like to do it with assertions, so you emphasize that that member must to be, like a contract.

>>> def foo(self):
...     assert self.value, "Not Found"
...     return self.value



回答4:


Well, you could test for the bool separately:

if expr: raise exception('foo')
return val

That way, you could test for expr earlier.



来源:https://stackoverflow.com/questions/10295841/raise-statement-on-a-conditional-expression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!