2010-12-30 10 views
22

正しい単語が何を検索するのかよく分かりません。エラーオブジェクトの一部をexceptブロック(Err.NumberとErr.Descriptionを持つVBScriptのerrオブジェクトに似ています)に表示します。たとえば、変数の値を表示してから、正確なエラーを表示したいとします。明らかに、私は下にゼロで分割されたエラーを引き起こしていますが、どうすればその事実を印刷できますか?Python try/except:変数を表示した後のエラーの原因を表示

try: 
    x = 0 
    y = 1 
    z = y/x 
    z = z + 1 
    print "z=%d" % (z) 
except: 
    print "Values at Exception: x=%d y=%d " % (x,y) 
    print "The error was on line ..." 
    print "The reason for the error was ..." 
+0

いいえ、そうではありません... –

答えて

38
try: 
    1/0 
except Exception as e: 
    print e 
+3

スタックトレースまたは行番号エラーが発生しません。 – NealWalters

+7

それは、元の質問が求めていた理由を示しています。 –

+0

Python 3の構文: 'print e'を' print(e) 'に置き換えてください。 – jedema

10

文字列の値がthe exception objectであることが原因です。 tracebackモジュールを使用すると、完全なトレースバックにアクセスできます。言い換えれば

3

try: 
    1/0 
except Exception as e: 
    print e 

あなたは彼の応答でイグナシオによってリンクマニュアルページで詳細を取得することができます。

+0

スタックトレースまたはエラーの行番号を指定しません。 – NealWalters

23

あなたはDIVIDEBYZEROエラーを期待している場合は、その特定のエラー

import traceback 
try: 
    x = 5 
    y = 0 
    print x/y 
except ZeroDivisionError: 
    print "Error Dividing %d/%d" % (x,y) 
    traceback.print_exc() 
except: 
    print "A non-ZeroDivisionError occurred" 
をキャッチすることができます

は、手動でより良いアプローチがあるtraceback.print_exc()

+0

ありがとうございます。私は本当に "トレースバック"を探していました - 私はエラーまたは例外オブジェクトを探していたので、それが呼び出されたことを思い出すことができませんでした。 – NealWalters

+0

DivideByZeroは自分の投稿に使用された単なるエラーだったので、実際の状況ははるかに複雑です。 – NealWalters

4

を呼び出すことにより、行番号やその他の情報を得ることができます標準Python Logging moduleを使用してください。

import sys, traceback, logging 

logging.basicConfig(level=logging.ERROR) 

try: 
    x = 0 
    y = 1 
    z = y/x 
    z = z + 1 
    print "z=%d" % (z) 
except: 
    logging.exception("Values at Exception: x=%d y=%d " % (x,y)) 

これは次の出力を生成します。

ERROR:root:Values at Exception: x=0 y=1 
Traceback (most recent call last): 
    File "py_exceptions.py", line 8, in <module> 
    z = y/x 
ZeroDivisionError: integer division or modulo by zero 

ロギングモジュールを使用する利点は、あなたがしている、すべての空想のログハンドラ(syslogの、電子メール、回転ファイルログ)へのアクセス権を持っているということですあなたの例外を複数の宛先に記録したい場合に便利です。

関連する問題