Pythonのジェネリックキャッチ


86

サイレント例外が発生するような非常に奇妙な動作があります。すべての例外をデバッグできる一般的なtrycatchを作成するにはどうすればよいですか。次のようなもの:

try:
    # something that fails
except e:
    print e

手元にある問題についてもう少し詳しく説明します。

私のコンピューター(Ubuntu Linux 8.10)ではrunserverとmod-pythonの両方で正常に動作するDjangoアプリがあります。デプロイサーバー(Ubuntu Linux 8.10)では、runserverを介して正常に動作しますが、mod-pythonのapacheを介して失敗します。

Berkeley DB(bsddb.db)とセカンダリキーを使用するアプリの一部に原因を絞り込みました。二次キーのコールバックメソッドは、pickleを使用してキーをフォーマットします。単一の値でpickleを呼び出すと失敗します。ただし、cPickleを使用した場合にのみ失敗し、コールバック関数の外部で同じ値にpickleを使用することもできます。

cPickleで失敗する理由を知りたいだけです。

回答:


164

例外は、プログラムの終了前にデフォルトですでに出力されています。エラーを別の場所に送信したい(印刷しない)場合は、次のようにします。

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

asキーワードを使用したこの形式は、Python> 2.6用であることに注意してください。古い方法は次のとおりです。

except Exception, e:

5
「Exceptionase」の変更について知りませんでした。「例外、e」はいつも私を悩ませていました。それがクリーンアップされたのを見てうれしいです。
monkut 2009年

3
'as'キーワードはPython用です> = 2.6
pixelbeat 2012

そのような単純な解決策。それでも私は隔月でそれをグーグルで検索し、トップリンクをクリックしてここに行き着きます。
niCk cAMel 2018年


1

これは機能しますか?:

except BaseException, e:

10
あなたはキャッチべきではないBaseException-それは、SystemExitKeyboardInterrupt、あなたが通常キャッチしたくないもの。
nosklo 2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.