关于条件表达式的语句

时间:2012-04-24 10:09:14

标签: python exception conditional raise zen-of-python

遵循“Samurai原则”,我试图在我的功能上做这个,但似乎是错的......

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

还有其他“漂亮”的方法吗?感谢

4 个答案:

答案 0 :(得分:19)

内联/三元if是一个表达式,而不是语句。你的尝试意味着“如果bool,返回值,否则返回raise expression的结果” - 这当然是胡说八道,因为raise exception本身就是一个陈述而不是一个表达。

内联无法做到这一点,你不应该这样做。明确地做:

if not bool:
    raise MyException
return value

答案 1 :(得分:13)

如果你想在表达式中raise,你可以做

def raiser(ex): raise ex

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

如果函数中没有无条件raiser(),则“尝试”返回None的返回值,该值为raise

答案 2 :(得分:2)

我喜欢用断言来做,所以你要强调那个成员必须像合同一样。

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

答案 3 :(得分:1)

好吧,你可以分别测试bool:

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

这样,您可以提前测试expr