web-dev-qa-db-ja.com

Pythonで例外を出力する方法

try:
    something here
except:
    print 'the whatever error occurred.'

except:ブロックにエラーや例外を表示するにはどうすればいいですか?

474
TIMEX

Python 2.6以降およびPython 3.xの場合:

except Exception as e: print(e)

Python 2.5以前の場合は、次のようにします。

except Exception,e: print str(e)
702
jldupont

traceback モジュールは 例外のフォーマットと出力のためのメソッドを提供します そしてそれらのトレースバック。これはデフォルトハンドラのように例外を表示します。

import traceback

try:
    1/0
except Exception:
    traceback.print_exc()

出力:

Traceback (most recent call last):
  File "C:\scripts\divide_by_zero.py", line 4, in <module>
    1/0
ZeroDivisionError: division by zero
318
Cat Plus Plus

Python 2.6以降 それは少しきれいです:

except Exception as e: print(e)

古いバージョンではまだかなり読みやすいです。

except Exception, e: print e
162
ilya n.

エラー文字列を渡したい場合は、 エラーと例外からの例を示します (Python 2.6)

>>> try:
...    raise Exception('spam', 'eggs')
... except Exception as inst:
...    print type(inst)     # the exception instance
...    print inst.args      # arguments stored in .args
...    print inst           # __str__ allows args to printed directly
...    x, y = inst          # __getitem__ allows args to be unpacked directly
...    print 'x =', x
...    print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
45

(私はこれを@ jldupontの回答に対するコメントとして残すつもりでしたが、私は十分な評判を得ていません。)

私は@ jldupontの答えのような答えを他の場所でも見ました。 FWIW、これに注意することが重要です。

except Exception as e:
    print(e)

デフォルトでエラー出力をsys.stdoutに出力します。一般的なエラー処理へのより適切なアプローチは次のようになります。

except Exception as e:
    print(e, file=sys.stderr)

(これを機能させるにはimport sysが必要です。)このように、エラーはSTDERRではなくSTDOUTに出力されます。これにより、適切な出力解析/リダイレクトなどが可能になります。問題は厳密には「エラーの印刷」であることを理解していますが、最終的にはうまく学習しない人にとって標準的でないコードにつながる可能性がある詳細を除外するのではなく.

私はCat Plus Plusの答えのようにtracebackモジュールを使ったことはありません、そしておそらくそれが最善の方法ですが、私はこれをそこで捨てることを考えました。

28
grish

それがあなたがやりたいことであれば、1つの明白なエラー発生をassert文で行うことができます。これはあなたが静的に修正可能なコードを書いて早くエラーをチェックするのを助けるでしょう。

assert type(A) is type(""), "requires a string"
5
whatnick

メッセージをstderrに出力したい場合は、ステータスコード1(エラー)で終了します。

import sys

try:
    ...
except Exception as e:
    sys.exit("Message to print to stderr")
0
Roger Dahl