私はraise
複数のExceptions
できる機能に取り組んでいます。私はこれらのブロックを例外ブロックに入れて処理し、カスタムメッセージとトレースバックで結果を返したいと思っています。問題はfinally
が保証されているので、else
ブロック内に何も返すことができないということです。Try-Except-Else-最後にelseの代わりに戻りますか?
このコードは、Exception
が発生しても動作しますが、Exception
がない場合は動作しません。そのような場合は、ちょうど返信{'success':True}
が必要です。したがって、このコードから
:
def foo():
try:
#some code
return {'success':True}
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
return {'success':False,
'tb':tb,
'msg':msg}
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
return {'success':False,
'tb':tb,
'msg':msg}
...
私はreturns
を繰り返さないようにしたいです。私は試しました:
def foo():
try:
pass
except FirstException:
tb = traceback.format_exc()
msg = 'There was FirstExc'
except SecondException:
tb = traceback.format_exc()
msg = 'There was SecondExc'
else:
return {'success':True}
finally:
return {'success':False,
'tb':tb,
'msg':msg}
あなたはそれを行う方法を知っていますか?私はreturn {'success':True}
をtry
ブロックに入れて、finally
とelse
ブロックを削除し、それぞれexcept
ブロックにreturn {'success':False,'tb':tb,'msg':msg}
を追加しましたが、コードが複数回繰り返されるように多くのexcept
ブロックがあります。
別のオプションはありますか?
条件式は、これはかなり読めなくなります。 '成功しなければreturn:{...}'を使い、次の行で 'return {...}'を使うだけです。 'else:'を使う必要はありません。 –
NameErrorを発生させます。 –
@brunodesthuilliers:いいえ、そうしないでしょう。 'success'が' True'の場合、条件式は最初の部分をまったく実行しません。 *ただし、*、最後の行で条件式を使用するために見えにくいです。 –