处理异常的最pythonic方式
The most pythonic way of handling exceptions
我有这个代码:
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'})
也许:
for key in ['key1', 'key2', 'key3', 'key4']:
try:
json.loads(normalize_data[key])
except KeyError:
raise serializers.ValidationError({'error': f'Field {key} is missing'})
except TypeError:
raise serializers.ValidationError({'error': f'Wrong format of {key}'})
我有这个代码:
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'})
也许:
for key in ['key1', 'key2', 'key3', 'key4']:
try:
json.loads(normalize_data[key])
except KeyError:
raise serializers.ValidationError({'error': f'Field {key} is missing'})
except TypeError:
raise serializers.ValidationError({'error': f'Wrong format of {key}'})