\

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のバージョンによってエラーメッセージの取得方法が異なることを理解することは、エラーハンドリングを効果的に行うために重要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です