Python3中如何正确捕获json.decoder.JSONDecodeError异常?PY萌新求助!

无论 except:、except Exception: 还是 except JSONDecodeError: 都无法捕获?


Python3中如何正确捕获json.decoder.JSONDecodeError异常?PY萌新求助!
2 回复

直接上代码,一看就明白:

import json

# 你的JSON字符串(这里故意给个错误的)
bad_json = "{'name': 'John', 'age': 30}"  # 注意:JSON标准要求双引号,这是Python字典格式

try:
    data = json.loads(bad_json)
    print("解析成功:", data)
except json.JSONDecodeError as e:
    print(f"JSON解析失败!")
    print(f"错误信息: {e.msg}")
    print(f"错误位置: 第{e.lineno}行, 第{e.colno}列")
    print(f"有问题的文本: {e.doc}")
except Exception as e:
    print(f"其他错误: {type(e).__name__} - {e}")

关键点:

  1. 异常名称是 json.JSONDecodeError(Python 3.5+)
  2. 这个异常提供了详细的错误信息:
    • e.msg:错误描述
    • e.lineno:行号
    • e.colno:列号
    • e.doc:出错的原始文本

实际使用示例:

import json

def parse_json_safely(json_str):
    try:
        return json.loads(json_str)
    except json.JSONDecodeError:
        return None  # 或者返回空字典/抛出其他异常

# 测试
result = parse_json_safely('{"valid": true}')
print(result)  # {'valid': True}

result = parse_json_safely('{invalid json}')
print(result)  # None

一句话总结:用 except json.JSONDecodeError: 捕获,别用通用的 except ValueError:


In [1]: import json
In [2]: try:
…: json.loads(‘a’)
…: except json.JSONDecodeError:
…: print(‘error’)
…:
error

回到顶部