try:
something here
except:
print 'the whatever error occurred.'
except:
ブロックにエラーや例外を表示するにはどうすればいいですか?
Python 2.6以降およびPython 3.xの場合:
except Exception as e: print(e)
Python 2.5以前の場合は、次のようにします。
except Exception,e: print str(e)
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
Python 2.6以降 それは少しきれいです:
except Exception as e: print(e)
古いバージョンではまだかなり読みやすいです。
except Exception, e: print e
エラー文字列を渡したい場合は、 エラーと例外からの例を示します (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
(私はこれを@ 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
モジュールを使ったことはありません、そしておそらくそれが最善の方法ですが、私はこれをそこで捨てることを考えました。
それがあなたがやりたいことであれば、1つの明白なエラー発生をassert文で行うことができます。これはあなたが静的に修正可能なコードを書いて早くエラーをチェックするのを助けるでしょう。
assert type(A) is type(""), "requires a string"
メッセージをstderrに出力したい場合は、ステータスコード1(エラー)で終了します。
import sys
try:
...
except Exception as e:
sys.exit("Message to print to stderr")