2013-06-18 4 views
8

私はエラーをデバッグしようとしていますが、最初にそれを実行した後、try/exceptブロックを入れてエラーが何であっても表示されるようになりました。Pythonの空のエラーメッセージ

try: 
    #some code 
except BaseException, e: 
    print str(e) 

これは出力の空白行を生成します。

EDIT:ご迷惑をおかけしていますが、エラーメッセージが空白になる特定の理由が考えられました。私が最初にtry/exceptブロックを実行するように強制されたスタックトレース出力はありません。私はまだこのことをプログラムしていますので、今は 'compiler'にエラーをキャッチさせています。エラーを投げている実際のコードはDjangoアプリにありますので、Djangoのいくつかの機能があります。

try: 
    if len(request.POST['dateToRun']) <= 0: 
     dateToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[0] 
    if len(request.POST['timeToRun']) <= 0: 
     timeToRun = Job.objects.filter(id=jobIDs[i]).values()['whenToRun'].split(' ')[1] 
except BaseException, e: 
    print str(e) 

これはビュー機能のコードです。 jobIDsは、## Selection:##(つまり17Selection:17)の形式で値のキーのペアを含むdictです。申し訳ありませんが、私はこれを初めて投稿するのを忘れました。

EDIT:repr(e)は私に何かを知らないよりも優れたTypeError()を与えました。

try: 
    raise Exception() 
except BaseException, e: 
    print str(e) 

使用repr(e)は例外がそれを上げたが何であるかを見るために:

+1

スタックトレースの出力と実際のコードを教えてください。 –

答えて

4

以下は出力の空白行を生成します。

9

これは例外がメッセージに添付されていないことを意味します。あなたはまた、トレースバックをプリントしたい場合があり

print repr(e) 

:例外タイプを印刷

import traceback 

# ... 
except BaseException as e: 
    traceback.print_exc() 

あなたはしかしBaseExceptionを引く回避にしたい、これは毛布except:声明よりも良いではありません。代わりに、より具体的な例外をキャッチします。

1

違反行が見つかるまで、try/exceptブロックをコードの小さな部分に置きます。あなたが持っている場合たとえば、:

try: 
    a = fn(b) 
    c = fn(a) 
except BaseException, e: 
    print str(e) 

その後にそれを変更します。

a = fn(b) 
try: 
    c = fn(a) 
except BaseException, e: 
    print str(e) 
4

は、使用してみてください:

try: 
    #code 
except BaseExeption as e: 
    print str(e) 

これは理解するのが最も簡単、そして感情のようです。