try:
response = urllib2.urlopen(req)
except Exception, e:
logger.exception(e)
このコードスニペットでurllib2.URLError
の代わりにException
をキャッチする説得力のある議論はありますか?より具体的なURLErrorの代わりにExceptionをキャッチするのはなぜですか?
try:
response = urllib2.urlopen(req)
except Exception, e:
logger.exception(e)
このコードスニペットでurllib2.URLError
の代わりにException
をキャッチする説得力のある議論はありますか?より具体的なURLErrorの代わりにExceptionをキャッチするのはなぜですか?
あなたがここで覚えていない、またはわからない例外が発生する可能性があります。ここでの唯一の例外はurllib2.URLError
である可能性がありますが、ある日、urllib2
の内部の何かが例外を生成するようにプログラムを記述します。それはバグかもしれない、完全な月にしか起こらない何かであるかもしれない、それはあなたのために設計されていない例外のいくつかの将来のブランドかもしれない。
本当にが起こっても元に戻したいですか?
さらに一般的に、catchする例外のタイプは、プログラムのロジックの不可欠な部分です。あなたが十分に具体的でないなら、あなたは論理的な誤りを持っています。話の終わり - if
の声明から句を外したのと同じです。
ctrl-cは 'KeyboardInterrupt'を引き起こします。もう一つ注目すべき例外は 'SystemExit'です。これは' sys.exit() 'によって生成されます。 –
あなたが言及したすべての例外は' Exception'のサブクラスではなく、捕まえられません! –
@mg - ありがとう、私はJavaの日をチャネリングしていた。 @ジョチョク、私はそれを考えなかった。私はそれらをキャッチしようとしない、あなたが参照してください:P私は私の一般的なポイントはまだ立っていると思う。 – detly
OKかどうかは、状況によって異なります。 1つのタイプの例外が発生する可能性がある場合、または異なるタイプの問題を別々に処理することについて気にしない場合、単に例外をキャッチすることは完全にうまくいきます。パフォーマンスにも影響はありません。ただし、コードを他の人が使用したり変更したりする場合は、特定の例外を除いて可読性を向上させることができます。
>>> import urllib2
>>> try: response = urllib2.urlopen(req)
... except Exception, e: print e
...
name 'req' is not defined
>>>
あまり意味のあるものではなく、あなたのスニペットでもありません。
* never * catching Exception'の通常の引数以外のものはありますか? –