[解決済み] except` 文では常に例外の型を指定する必要がありますか?
質問
PyCharm IDEを使用しているときに
except:
を使うと、IDE はこの例外節が
Too broad
.
このアドバイスは無視すべきなのでしょうか?それとも、例外の型を常に特定するのがPythonicなのでしょうか?
どのように解決するのですか?
ほとんどの場合、明示的に例外の型を指定したほうがよいでしょう。もし、裸の
except:
これはバグを隠したり、プログラムが期待通りに動いていないときにデバッグを困難にします。
例えば、データベースに行を挿入する場合、行が既に存在することを示す例外をキャッチして、更新を行うことができるようにしたいと思うかもしれません。
try:
insert(connection, data)
except:
update(connection, data)
もし、素の
except:
を指定した場合、データベースサーバーが落ちたことを示すソケットエラーもキャッチすることになります。処理方法を知っている例外のみをキャッチするのが最善です。プログラムは継続しながらも予期しない奇妙な動作をするよりも、例外の発生時点で失敗する方が良い場合が多いからです。
を使いたいと思うかもしれない1つのケースがあります。
except:
を使いたい場合の一つは、ネットワークサーバーのように 常に起動している必要があるプログラムのトップレベルにある場合です。しかし、その場合は例外のログを取ることに細心の注意を払う必要があり、そうでなければ何が問題なのかを解明することは不可能になります。基本的に、これを行う場所は、プログラムの中でせいぜい1つだけであるべきです。
この全てに付随することとして、あなたのコードは決して
raise Exception('some message')
を使うようにクライアントコードに強制するからです。
except:
(または
except Exception:
というのは
ほとんど
のように悪いものです)。シグナルを送りたい問題に特化した例外を定義する必要があります (たとえば
ValueError
または
TypeError
). あるいは、特定の組み込み例外を発生させる必要があります。これにより、あなたのコードのユーザは、処理したい例外だけをキャッチするように注意することができます。
関連
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Javaにおけるチェック済み例外とチェックされていない例外の理解
-
[解決済み] Pythonで悪い/不正な引数の組み合わせに対してどの例外を発生させるべきですか?
-
[解決済み] import文は常にモジュールの先頭にあるべきですか?
-
[解決済み] なぜすべてのブロックを "try"-"catch "で包んではいけないのですか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】re.subが "Expected string or bytes-like object "でエラーになる。
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決