2009-11-11 24 views
35

は、プログラムがエラーや印刷物で終了します。例外メッセージ(パイソン2.6)Pythonで

Traceback (most recent call last): 
    File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
    line 4, in <module> 
    pkl_file = open('monitor.dat', 'rb') 
    IOError: [Errno 2] No such file or directory: 'monitor.dat' 

私は「トライを除き」でこれを扱うことができます次のようになります。

try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except Exception: 
    print 'No such file or directory' 

私は、例外を捕まえて、次の行を印刷できますか?

File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
line 11, in <module> 
pkl_file = open('monitor.dat', 'rb') 

したがって、プログラムは終了しません。

答えて

91

これは例外メッセージを出力します。

except Exception, e: 
    print "Couldn't do it: %s" % e 

これは全体のトレースバックが表示されます:

import traceback 

# ... 

except Exception, e: 
    traceback.print_exc() 

をしかし、あなたは例外をキャッチしたくない場合があります。あなたが狭くなると、あなたのキャッチを良くすることができます。したがって、代わりに試してみるとよいでしょう:

except IOError, e: 

また、あなたが不足しているファイルについてのみ関心がある場合は、あなたの例外処理を狭めるをテーマに、そして唯一のオープンの周り以外のtry-置く:

try: 
    pkl_file = open('monitor.dat', 'rb') 
except IOError, e: 
    print 'No such file or directory: %s' % e 

monitoring_pickle = pickle.load(pkl_file) 
pkl_file.close() 
+0

これは私には役に立たなかった。 Jochenの答えがあった。 – Josh

+0

@Josh答えはこれとほとんど同じです。 –

9

Pythonがtracebackモジュールを持っています。

import traceback 
try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except IOError: 
    traceback.print_exc() 
6

ありがとうございます。

あなたは例外によって渡された例外オブジェクトをキャプチャしたい場合は、それは(現在の両方をサポートしています)はPython 2.6で導入された新しい形式の使用を開始するのが最善です:)

import traceback 

try: 
    # boom 
except Exception: 
    print traceback.format_exc() 
+8

コメントを作成するときには、回答を作成しないでください。あなたのヘルパーに報酬を与える答えの一つを受け入れてください! –

+0

Ned Bの答えをもう一度見てください。あなたの直面する問題を解決するだけでなく、彼が作るいくつかの重要なポイントがあります。 – PaulMcG

+0

ありがとう、ポール、私はこの質問の活動の終わりに達したと感じている... –

22

私が必要なもの、だからそれは、Python 3に

をそれを行うための唯一の方法となりますそして、それは次のようになります。

try: 
    ... 
except IOError as e: 
    ... 

例:

try: 
    pkfile = open('monitor.dat', 'rb') 
except IOError as e: 
    print 'Exception error is: %s' % e 

詳細な概要はWhat's New in Python 2.6 documentationにあります。

+2

役立つ、しかしこれは質問に答えなかった。コメントとしてはどうでしょうか? – Josh

関連する問題