finally ブロックで何かが起こった場合に try ブロック内に戻るのは良い考えではないと思います。
あなたは間違っていると仮定しています。a の重要な点は、未処理の例外を早期に発生させたり発生させたりしても、常に発生するfinally
ということです。 * そして、.**の後に発生します。return
break
return
これは、ドキュメントの The try statementで説明されていますが、ドキュメントの中で最も初心者向けのセクションではありません。
そうは言っても、finally
ブロックを偽造するためにブロックを使用しているようですexcept
。例外があったかどうかを確認するためにフラグをチェックする代わりにfinally
、例外自体を使用して、例外があったことを伝えます。
def connect(self):
try:
conn = ftplib.FTP(self.hostname, self.user, self.password)
return conn
except Exception as e:
logging.error('Failed to connect to %s for %s' % (self.hostname, self.user))
raise
* その「常に」は、実際には制限内でのみ当てはまります。プログラムがインタプリタをセグメンテーション違反にする C コードを呼び出したり、明示的に を呼び出し_exit
たり、誰かがプログラムの途中で電源コードを引っ張ったりすると、finally
コードは明らかに実行されません。
** の途中で起こっていると言う方が正確かもしれませんが、それreturn
は混乱を招くだけだと思います。return
実際にインタープリターの根性に取り組んでいない限り、1 つのステップと考えることができます。