Edited at

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

More than 1 year has passed since last update.


ソースコード


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でコンパイルエラーが発生した時、

そのエラー箇所にカーソルを当ててこのショートカットを使うと

根本原因のソースコードにカーソルが当たったり、

解決策が表示され、クリックすると自動で修正してくれたりします。