私はTwisterを使用してサーバーを構築しています。私はまた、サーバーのエラーログを維持しています。問題は、例外をスタック全体まで実行させると、現在の接続がクラッシュしてユーザーが切断されるため、他のすべてのものを取得する以外は明らかに私は裸を付けます。例外からのトレースバックを再発生せずに取得する
私が何かをキャッチしたら、トレースバックを文字列として取得して、どこにでも格納できるようにするか、プログラムをクラッシュさせてからPythonで印刷するようにしてください。
私はTwisterを使用してサーバーを構築しています。私はまた、サーバーのエラーログを維持しています。問題は、例外をスタック全体まで実行させると、現在の接続がクラッシュしてユーザーが切断されるため、他のすべてのものを取得する以外は明らかに私は裸を付けます。例外からのトレースバックを再発生せずに取得する
私が何かをキャッチしたら、トレースバックを文字列として取得して、どこにでも格納できるようにするか、プログラムをクラッシュさせてからPythonで印刷するようにしてください。
- しかし、重要なことは、ということですトレースバック情報そのものはモジュールsys上の "interpreter global"変数 - sys.exc_tracebackに格納されます。引用
:除く節のスイートが実行される前に
http://docs.python.org/reference/compound_stmts.html#try
は、 例外に関する詳細は、SYSモジュールに三つの変数に割り当てられている: sys.exc_typeは識別オブジェクトを受け取り例外; sys.exc_valueは例外のパラメータを受け取ります。 sys.exc_traceback は
あなたはexcept節内stdoutに印刷されたトレースバックを持っているtraceback.print_tbするパラメータとしてsys.exc_tracebackオブジェクトを渡すことができます...トレースバックオブジェクトを受け取ります。
ええ、それにはmoduleがあります。 traceback
モジュールには、例外情報の出力や書式設定、または生のスタックフレームを返す関数が含まれています。
かなり洗練されたアプリケーションでは、私は実際には古くなった古いtraceback
機能の代わりにログシステムを使用することをお勧めします。特に、方法logging.Logger.exception
は、あなた(またはあなたのソフトウェアのユーザ)が設定したどのロギング先にも例外に関する情報を書き込みます。デフォルトのフォーマッタは、Pythonがコンソール上にあるようにトレースバックを出力しますが、Formatter
を作成し、format_exception
メソッドをオーバーライドすることで、例外の表示をカスタマイズすることができます。オーバーライドされたメソッドは、例外出力をフォーマットする必要がある場合は、traceback
関数を呼び出す場所です。
、あなたがファイルへlog the tracebackできlogging module使用:トレースバックモジュールは、印刷およびトレースバック(examebleため、traceback.print_tb)を検査するためのいくつかのヘルパー関数が含まれてい
import logging
logging.basicConfig(level = logging.DEBUG, filename = logfile)
logger = logging.getLogger(__name__)
try:
1/0
except ZeroDivisionError as err:
logger.exception(err)
はこれを試してみてください:トリックを行うと、あまりにも完全なスタックトレースを印刷する必要があり
import traceback, sys
try:
# Do something that might raise an exception
open("/does not exist",'rb')
except:
traceback.print_exc(file=sys.stderr)
# Or
traceback.print_exc(file=your_open_log_file)
。
これは完璧です、ありがとうございます! – xanderflood