Pythonでエラーハンドリングを行う際、エラーメッセージの取得は重要なステップです。Python 3.6.3では、エラーメッセージを取得するために .message
が使えないことがあります。
以下に、エラーメッセージを取得する一例を示します。
try:
a = 10 / 0
print("{0}".format(a))
except ZeroDivisionError as e:
print("message:{0}".format(e.message))
しかし、上記のコードは AttributeError: 'ZeroDivisionError' object has no attribute 'message'
というエラーを引き起こします。
この問題を解決するためには、dir()
を使用してエラーオブジェクトが持つアトリビュートの一覧を確認できます。
try:
a = 10 / 0
print("{0}".format(a))
except Exception as e:
print(dir(e))
この結果から、args
が問題ないことがわかりますが、message
は見当たりません。
Python 2.7.14では、message
を使用してエラーメッセージを出力することができます。
try:
a = 10 / 0
print("{0}".format(a))
except Exception as e:
print("message:{0}".format(e.message))
しかし、Python 3.6.3では、with_traceback
を使用してエラーメッセージを出力する必要があります。
import sys
try:
a = 10 / 0
print("{0}".format(a))
except Exception as e:
tb = sys.exc_info()[2]
print("message:{0}".format(e.with_traceback(tb)))
以上のように、Pythonのバージョンによってエラーメッセージの取得方法が異なることを理解することは、エラーハンドリングを効果的に行うために重要です。