pycodestyle(PEP8)のtry except構文に関するエラーについて

久しぶりにPythonのコードを書いているのですが、try except構文で下記のようなエラーが発生しました。

error| E722: do not use bare 'except'

ちなみに構文チェックにpycodestyle(PEP8)というリンターを使っており、上記エラーはPEP8の指摘です。

try except構文のベストプラクティス

try except文を利用する場合、exceptブロックでは可能な限り例外処理を指定しろとのことです。

catch specific exceptions whenever possible.

https://www.flake8rules.com/rules/E722.html

# example
try:
    user = User.objects.get(pk=user_id)
    user.send_mail('Hello world')
except User.DoesNotExist:
    logger.error('The user does not exist with that ID')

キャッチしたい例外がない場合

キャッチしたい特定の例外がない、あるいは例外処理の前に処理をしたい場合、exceptに BaseException を指定することで回避できます。

try:
    subprocess.check_call(pkill)
    print('hogehoge')
except BaseException:
    print('mogumogu')

しかしこの方法については議論が分かれているらしく、BaseExceptionを指定する方法が最良の方法ではないようです。(参考: https://github.com/PyCQA/pycodestyle/issues/703

まとめ

try except構文のE722エラーについて、解決策をまとめました。

そもそもtry except構文はあまり多用しないようにコーディングするのがいいのかもしれませんね。