遵循“Samurai原则”,我试图在我的功能上做这个,但似乎是错的......
return <value> if <bool> else raise <exception>
还有其他“漂亮”的方法吗?感谢
答案 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
。