finally ブロック内で break や continue を使用しない

メタデータ

ID: python-best-practices/finally-no-break-continue-return

言語: Python

重大度: 警告

カテゴリー: ベストプラクティス

説明

finally ブロックの中で returnbreakcontinue を使用すると、tryelseexcept ブロックでスローされた例外の伝播が停止し、return ステートメントは無視されます。

詳細はこちら

非準拠コードの例

try:
    client_obj.get_url(url)
except (URLError, ValueError):
    client_obj.remove_url(url)
except SocketTimeout:
    client_obj.handle_url_timeout(url)
finally:
    break  # finally ブロックの break を避けます
try:
    client_obj.get_url(url)
except (URLError, ValueError):
    client_obj.remove_url(url)
except SocketTimeout:
    client_obj.handle_url_timeout(url)
finally:
    return 0  # finally ブロックの return を避けます
try:
    client_obj.get_url(url)
except (URLError, ValueError):
    client_obj.remove_url(url)
except SocketTimeout:
    client_obj.handle_url_timeout(url)
finally:
    continue  # finally ブロックの continue を避けます

準拠コードの例

try:
  client_obj.get_url(url)
except (URLError, ValueError):
  client_obj.remove_url(url)
except SocketTimeout:
  client_obj.handle_url_timeout(url)
finally:
  print("cleanup the mess")