PythonでDynamoDBの例外処理をする。


ソースコード

Main.py
from botocore.exceptions import ClientError
if __name__ == '__main__':
    try:
        table = boto3.resource('dynamodb').Table('TableName')

        # DynamoDBからのエラーが発生するコードをここに書く

    except ClientError as e:
        print(e)
        print(e.response['Error']['Message']) # エラーメッセージ
        print(e.response['Error']['Code'])    # エラーコード(Exceptionの種類を示す文字列)
        print(e.response['ResponseMetadata']['RequestId'])
        print(e.response['ResponseMetadata']['HTTPStatusCode']) # ステータスコード
        print(e.response['ResponseMetadata']['HTTPHeaders']['server'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['date'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['content-type'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['content-length'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['connection'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['x-amzn-requestid'])
        print(e.response['ResponseMetadata']['HTTPHeaders']['x-amz-crc32'])
        print(e.response['ResponseMetadata']['RetryAttempts'])

※S3にもエラーメッセージ、エラーコード、ステータスコードは使用できます。

実行結果(例)

※接続情報などは*****でマスキングしています。

An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: An expression attribute value used in expression is not defined; attribute value: :val
Invalid UpdateExpression: An expression attribute value used in expression is not defined; attribute value: :val
ValidationException
****************
400
Server
Thu, 17 May 2018 03:58:39 GMT
application/x-amz-json-1.0
***
keep-alive
****************
*****
0

この記事を書いた理由

HTTPStatusCodeを取得するためにネットで検索した際、
下記のStackoverflowに英語で例外処理が書いてありましたが、見つけにくかったので。
https://stackoverflow.com/questions/33068055/boto3-python-and-how-to-handle-errors

付録:EclipseでPythonを書く際の便利なショートカットキー

Ctrl + 1
※「F1」ではなく「1」
Eclipseでコンパイルエラーが発生した時、
そのエラー箇所にカーソルを当ててこのショートカットを使うと
根本原因のソースコードにカーソルが当たったり、
解決策が表示され、クリックすると自動で修正してくれたりします。