python - 处理异常的最pythonic方式
问题描述
我有这个代码:
normalize_data['key1'] = json.loads(normalize_data.get('key1', ''))
normalize_data['key2'] = [key for key in
json.loads(normalize_data.get('key2', '[]'))]
normalize_data['key3'] = [json.loads(normalize_data.get('key3', ''))]
normalize_data['key4'] = [json.loads(normalize_data.get('key4', ''))]
如您所见,每个键的处理方式都不同。如果缺少任何键,它将引发JSONEncodeError
。如果任何键的任何值格式错误,它将引发TypeError
. 处理这些的最pythonic方式是什么?我试着把它放在上面的代码之前:
for key in ['key1', 'key2', 'key3', 'key4']:
if key not in normalize_data:
raise serializers.ValidationError({'error': f'Field {key} is missing'})
try:
json.loads(normalize_data[key])
except TypeError:
raise serializers.ValidationError({'error': f'Wrong format of {key}'})
但我真的不喜欢它。谢谢大家。
解决方案
会有怀疑者,但我会这样做:-
for key in ['key1', 'key2', 'key3', 'key4']:
try:
json.loads(normalize_data[key])
except TypeError:
raise serializers.ValidationError({'error': f'Wrong format of {key}'})
except KeyError:
raise serializers.ValidationError({'error': f'Field {key} is missing'})
推荐阅读
- java - 在 Apache Camel 中处理 SocketTimeoutException
- reactjs - 如何从反应应用程序调试反应库
- hyperledger-fabric - 是否可以在我的主机上获取文件以供 Hyperledger Fabric 中的链代码使用?
- java - 如何检查 BitmapFactory.decodeStream() 是否已完全下载图像?
- css - 显示垂直滚动但允许浮动溢出的容器
- firebase - 无法在 Firebase 云功能中部署 PubSub 功能
- linux - 除了历史记录之外,有没有办法找到我们在 linux 中运行的命令
- context-free-grammar - 为最多两个 0 的偶数长度字构造 CFG
- flutter - 无法使用传播集合
- java - 香农熵不打印任何东西