PythonでJSONDecodeErrorを捕捉しエラー情報を取得する方法

この記事では、Pythonのjsonモジュールにおける`JSONDecodeError`の捕捉とそのエラー情報の取得方法について詳しく解説します。具体的なコード例、その解説、さらに応用例を3つ含めています。

目次

JSONDecodeErrorとは

PythonでJSON形式のデータを扱う際には、標準ライブラリである`json`モジュールが頻繁に使用されます。このモジュールは非常に便利ですが、JSON形式が不正な場合には`JSONDecodeError`が発生します。このエラーはJSONの解析に失敗した際の情報を含んでおり、デバッグやエラーハンドリングで重要な役割を果たします。

JSONDecodeErrorの特性

`JSONDecodeError`は、`json`モジュール内で定義されています。このエラークラスは以下の主要な属性を持っています。

– `msg`: エラーメッセージ
– `pos`: エラーが発生した位置(インデックス)
– `lineno`: エラーが発生した行番号
– `colno`: エラーが発生した列番号

基本的な使い方

`JSONDecodeError`の捕捉とエラー情報の取得には`try-except`ブロックを使用します。以下は基本的な使い方の一例です。

import json

try:
    json.loads('{"key": "value",}')
except json.JSONDecodeError as e:
    print(f"エラーメッセージ: {e.msg}")
    print(f"エラー位置: {e.pos}")
    print(f"エラー行番号: {e.lineno}")
    print(f"エラー列番号: {e.colno}")

コードの解説

1. `json`モジュールをインポートしています。
2. `try`ブロック内で、不正なJSONデータ(この場合は最後に`,`が存在する)を`json.loads()`で読み込みます。
3. `except`ブロックで`JSONDecodeError`を捕捉し、その属性を表示しています。

応用例

例1: ロギングにエラー情報を含める

import json
import logging

logging.basicConfig(level=logging.ERROR)

try:
    json.loads('{"key": "value",}')
except json.JSONDecodeError as e:
    logging.error(f"JSONDecodeError caught: msg={e.msg}, pos={e.pos}, lineno={e.lineno}, colno={e.colno}")

例2: 不正なJSONデータの修正と再解析

import json

def try_parse(json_str):
    try:
        return json.loads(json_str)
    except json.JSONDecodeError as e:
        corrected_str = json_str[:e.pos] + json_str[e.pos + 1:]
        return json.loads(corrected_str)

print(try_parse('{"key": "value",}'))  # 出力: {'key': 'value'}

例3: ユーザーへのフィードバック

import json

try:
    json.loads('{"key": "value",}')
except json.JSONDecodeError as e:
    user_error = f"JSONデータが不正です。行{e.lineno}、列{e.colno}を確認してください。"
    print(user_error)

まとめ

PythonでJSONデータを安全に扱うためには、`JSONDecodeError`の適切な捕捉とエラー情報の取得が不可欠です。この記事で解説した方法や応用例を参考に、より堅牢なコードを書いてみてください。

コメント

コメントする

目次