1. ホーム
  2. python

[解決済み] Python用ジェネリックキャッチ

2023-01-10 17:50:47

質問

サイレント例外が発生するような、非常に奇妙な動作があります。すべての例外をデバッグできる一般的なトライキャッチをどのように書けばよいのでしょうか。行に沿った何か。

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 を使用します。1つの値に対してpickleを呼び出すと失敗する。しかし、それは私がcPickleを使用するときにのみ失敗し、コールバック関数の外側で同じ値でpickleを使用することも動作します。

なぜcPickleで失敗するのか知りたいのです。

どのように解決するのですか?

例外は、デフォルトではすでにプログラム終了前に出力されます。もし、エラーをどこかに送りたい(プリントしない)場合は、このようにします。

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: