直接上代码,一看就明白:
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}")
关键点:
- 异常名称是
json.JSONDecodeError(Python 3.5+)
- 这个异常提供了详细的错误信息:
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:。