遵循“武士原则”,我试图在我的功能上做到这一点,但似乎是错误的......
return <value> if <bool> else raise <exception>
有没有其他“美丽”的方式来做到这一点?谢谢
遵循“武士原则”,我试图在我的功能上做到这一点,但似乎是错误的......
return <value> if <bool> else raise <exception>
有没有其他“美丽”的方式来做到这一点?谢谢
如果你绝对想raise
表达,你可以这样做
def raiser(ex): raise ex
return <value> if <bool> else raiser(<exception>)
如果函数中没有无条件,则raiser()
此“尝试”返回 的返回值。None
raise
内联/三元if
是一个表达式,而不是一个语句。您的尝试意味着“如果 bool,返回值,否则返回”的结果raise expression
- 这当然是无稽之谈,因为raise exception
它本身就是一个语句而不是表达式。
没有办法做到这一点内联,你不应该想要。明确地这样做:
if not bool:
raise MyException
return value
我喜欢用断言来做,所以你强调那个成员必须像合同一样。
>>> def foo(self):
... assert self.value, "Not Found"
... return self.value
好吧,您可以单独测试布尔值:
if expr: raise exception('foo')
return val
这样,您可以expr
更早地进行测试。
有一种方法可以在三元组内部加注,诀窍是使用exec
:
def raising_ternary(x):
return x if x else exec("raise Exception('its just not true')")
如您所见,调用它True
会执行三元组的第一部分,调用它False
会引发异常:
>>> def raising_ternary(x):
... return x if x else exec("raise Exception('its just not true')")
...
>>> raising_ternary(True)
True
>>> raising_ternary(False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in raising_ternary
File "<string>", line 1, in <module>
Exception: its just not true
>>>