2016-11-23 11 views
0

を扱う私は以下のようにコードを書いた:Pythonはマルチ例外

try: 
    do_somethong 
except TimedOutException as e: 
    logger.exception(e) 
except Exception as e: 
    logger.exception(e) 

は以下のコードと同じですか?

try: 
    do_somethong 
except (TimedOutException, Exception) as e: 
    logger.exception(e) 

私はTimedOutExceptionを削除する必要TimedOutExceptionは、Exceptionのサブクラスである知っていますか?誰でも私のためにそれを説明することができますか?前もって感謝します!

答えて

1

WARNING:except Exception as e:をグループとしてそれからinhetirtsすべての例外(例外のほとんどがカップルのpython関連するものを除き、Exceptionから継承)

まだ例外を使用したい場合には使用すべきではありません、TimedOutExceptionは必要ではないでしょう。

例外を処理する場合、except句で使用されるクラスのインスタンスであるすべての例外またはその子クラスが処理されるため、Exceptionは基本的に99%の例外を処理します。そのため、raiseで再び同じ例外をログに記録していない限り、Exceptionはこのpurpouseのクラスとしてはお勧めできません。

複数のexcept節を使用する場合は、例外はすべてその型に一致する最初のexcept節でのみ処理されるため、順序は重要です。あなたは、同じ処理グループを同じブロック内のすべての例外を適用して、既に存在しているクラスの例外サブクラスを追加しない場合

try: 
    do_somethong 
except TimedOutException as e: 
    # special processing for timeout 
    logger.exception(e) 
except Exception as e: 
    # different processing for all other exception 
    logger.exception(e) 
    exit(1) # say it is fatal for example... 

:あなたは異なる処理を適用したい場合は

+0

hmmm私は質問を違って解釈していましたが、あなたが今言おうとしていることがわかります。 –

+0

私はそれをより明確にするために、いくつかのさらなる説明を追加します。 – Adirio

+0

'TimedOutException'を発生させたときに再試行したい場合は、最初の方法が優れていますが、すべての例外を発生させたときにエラーメッセージを出力したい場合は' Exception'を使うことができ、 'TimedOutException'を追加する必要はありません。 、 は正しい? – pangpang

1

複数exceptブロックが使用されています。