「侍の原則」に従って、私は自分の関数でこれを行おうとしていますが、それは間違っているようです...
return <value> if <bool> else raise <exception>
これを行う他の「美しい」方法はありますか?ありがとう
インライン/三項if
は式であり、ステートメントではありません。あなたの試みは「ブール値の場合は値を返し、そうでない場合はraise expression
の結果を返す」ことを意味します。これはもちろん意味がありません。raise exception
自体は式ではなくステートメントだからです。
これをインラインで行う方法はありません。そうするべきではありません。明示的に行う:
if not bool:
raise MyException
return value
式で絶対にraise
したい場合は、次のことができます。
_def raiser(ex): raise ex
return <value> if <bool> else raiser(<exception>)
_
これは、関数に無条件のNone
がない場合、raiser()
の戻り値を返すように「試行」します。これはraise
になります。
私はアサーションでそれを行うのが好きなので、あなたはそのメンバーが契約のようでなければならないことを強調します。
>>> def foo(self):
... assert self.value, "Not Found"
... return self.value
さて、ブール値を個別にテストできます。
if expr: raise exception('foo')
return val
そうすれば、以前にexpr
をテストできます。