关于条件表达式的语句

F.D*_*.F. 23 python conditional exception raise zen-of-python

遵循"武士原则",我试图在我的功能上做这个,但似乎是错的......

return <value> if <bool> else raise <exception>
Run Code Online (Sandbox Code Playgroud)

有没有其他"美丽"的方式来做到这一点?谢谢

Dan*_*man 20

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

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

if not bool:
    raise MyException
return value
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个问题实际上可以翻译为:有没有办法将异常作为表达式而不是语句引发?正如@glglgl 所建议的,答案是肯定的。 (4认同)

glg*_*lgl 15

如果你绝对想要raise表达,你可以做到

def raiser(ex): raise ex

return <value> if <bool> else raiser(<exception>)
Run Code Online (Sandbox Code Playgroud)

这种"尝试"返回的返回值raiser(),这将是None,如果没有无条件raise的功能.

  • 我发现在配置依赖于环境变量的设置文件时,这对于速记三元来说很方便。这样我仍然可以在文件中保留干净的字典行,而且当特定设置丢失时也可以提供有用且更具体的错误消息。例如: `{'f': os.environ.get('FOO') 或 raise_foobar(), ...}` (2认同)