35

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-except」で処理できます。

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')

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

4

4 に答える 4

90

これにより、例外メッセージが出力されます。

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

これにより、トレースバック全体が表示されます。

import traceback

# ...

except Exception, e:
    traceback.print_exc()

ただし、例外をキャッチしたくない場合があります。一般的に、キャッチできる幅が狭いほど、より良い結果が得られます。だからあなたは試してみたいかもしれません:

except IOError, e:

代わりは。また、例外処理を絞り込むというテーマで、不足しているファイルのみを懸念している場合は、オープンの周りにのみ try-except を配置します。

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()
于 2009-11-11T13:38:16.280 に答える
22

例外によって渡された例外オブジェクトをキャプチャしたい場合は、Python 2.6 で導入された NEW 形式 (現在は両方をサポートしています) を使用することをお勧めします。これは、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 ドキュメント にあります

于 2009-11-11T14:15:49.897 に答える
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()
于 2009-11-11T13:39:48.813 に答える
6

全てに感謝。

それが、私が必要としていたものです:)

import traceback

try:
    # boom
except Exception:
    print traceback.format_exc()
于 2009-11-11T13:57:15.253 に答える