質問

このようなブロックの場合:

try:
    #some stuff
except Exception:
    pass

pylint は警告 W0703 'Catch "Exception"' を生成します。なぜ?

役に立ちましたか?

解決

これは通常、ルート例外オブジェクトをキャッチしないことをお勧めと考えられていますが、その代わりに、より具体的なものをキャッチする - 。例のIOException

のために メモリ例外のうちが発生した場合は、

考えてみましょう - 。単に良好な状態であなたのプログラムを終了するつもりはない「パス」を使用して

ほとんどあなたが例外をキャッチしなければならない唯一の時間は、あなたがのように優雅にすることができますように、それをログにエラーを表示し、終了(しよう)することができ、あなたのプログラムのトップレベルである。

他のヒント

これは、タイプのごく狭い範囲をキャッチすることをお勧めします。 「例外」はあまりにも一般的である - あなたがいないあなたのために計画されたばかりのエラーをキャッチしてしまうが、他のエラーも、それらはすべてでキャッチされなかった場合の診断に速くなり、あなたのコード内のバグを隠す可能性がある、または可能だろうします優れた単一の非常に高いレベルの例外ハンドラによって対処されます。

あなたは(SystemExitを、KeyboardInterrupt)をキャッチしたくないすべての例外は、もはやExceptionから継承されないためのpython2.6以来、キャッチ例外は、多くのより合理的になってきている、と述べました。彼らは代わりに代わり、共通のBaseExceptionから継承します。これは、このような一般的なイディオムであることから、キャッチ例外は比較的無害にするために意図的に行われています。

詳細&将来の計画のために PEP 3110 のを参照してください。

それはあなたがあまりにも多くをキャッチしていると思っているので。そして、それはそうです。

何か...例外が発生したときに、

例外が発生しています。これは、プログラムが終了することが一般的に良いことだ。

あなたは、いくつかの例外を無視することもできますが、IMOそのように基底クラスを引くための良い理由はありません。

Greg の答えと同様に、「Exception」は基本クラスであり、例外はこのクラスから派生する必要があります。 例外.例外.

ここで非常に便利な のエラーのリスト pydocs

例外が発生した場所を見つけることができる非常に便利なトレースバック モジュールにも注目してください。'以外の場合のみ使用:...」は、あなたの場合にどのエラーを使用するのが最適かを示します。たとえば、次のコードを試してみてください (コメントを切り替えます)。おそらく受け入れられるでしょう。

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 
エラーが食われるので、あなたは、スタックトレースするだけでなく、それは、Ctrl-Cを失う(または任意のブレークキーは、ご使用のオペレーティング・システム上にある)も扱われます:

(再調達せずに)例外をキャッチ2つの本当に悪い副作用を持っていますここます。

このようなプログラムの典型的な動作は、いずれか、彼らが停止することができない、またはそのCTRL-cは(例外ハンドラに)前方にスキップする制御フローを起こし、その後、継続していることです。その後、コードのいずれかが中断することができない、またはあなたはそれが停止するために得るためには、Ctrl-Cでハンマーする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top