2016-04-25 13 views
2

私のプロジェクトのコードは、次のようなブロックがいっぱいです:"raise"または "exception"の動作を変更できますか?

try: 
    execute_some_code() 
except Exception: 
    print(datetime.datetime.now()) 
    raise 

単に私は、エラーメッセージを取得する場合、私はそれが起こったときに知りたいのですが、理由は。私はこのコードを何度も何度も繰り返すのはむしろ馬鹿だと思っています。

execute_some_codeは、エラーをキャプチャする何かで飾りたいとはしません(関数呼出しではなく、時にはまったく同一の機能を必要としないこともあります。 )。私はまた、stdoutに送信される他のすべてのものにも影響するため、stdoutをすべてのものを記録する別のストリームに振り分けたくありません。

理想的には、私はどちらかraise文の振る舞いを過剰乗ってみたいすべての時間とのメッセージの-保留を事前に、またはExceptionクラス(また、すべての実行にdatetime.datetime.now()を印刷します)。 Exceptionから簡単にサブクラス化できますが、私の関数がこのサブクラスのインスタンスを生成していることを確認しなければなりません。

これらのオプションのいずれかは可能ですか?しよう - あなたはない異なる振る舞いをraiseを交換したいん

+0

オプションのデバッガを使用していますか? – xuhdev

+0

私は 'sys.excepthook'について書いていましたが、@IljaEveriläはそれを見つけて私に襲いかかりました。 – Boldewyn

答えて

0

あなたは(私はそれが可能だろうか複雑で確認するためにコードを読む必要があるだろう)のpythonを変更することができるかもしれませんが、 catchingは問題解決のための非常にpythonicなアプローチなので、非常にうまく動作するコードがたくさんあります。メソッドを呼び出してそのメソッドに例外を発生させ、通常の状況下で例外をキャッチします。そのアプローチを排除することができます。実際には、操作中には正常なものではなく、気にする例外について知りたいだけです。

同じことがExceptionインスタンスが作成されるたびに、いくつかのアクションをトリガーするために行く - しかし:

あなたはグローバル名前空間を上書きすることができるかもしれません。少なくともあなた自身のExceptionクラスを宣言した後に初期化されるものについては、その後、タイムスタンプを含むmessageプロパティを追加することができます。しかし、実際に例外に自動的に反応するメッセージに頼っている人がいるかもしれません(悪いスタイルですが、それほど悲しいことではありません)。

関連する問題