python - 验证字典列表中元素的正确格式的最佳实践
问题描述
我有一个包含来自 API 的数据的 dicts 列表,并且想要遍历这个列表,并验证每个键的数据格式是否正确。我有实现此目的的单独功能,但是我想将它们集成到一个整体功能中。
例如从这个:
validate_date = datetime.datetime.strptime(date, '%d-%m-%Y')
validate_name = isinstance(name, str)
对于这样的事情:
def validate_content(row):
try:
datetime.datetime.strptime(row[0], '%d-%m-%Y')
except:
raise ValueError('Incorrect date format detected')
try:
isinstance(row[1], str)
except:
raise ValueError('Incorrect name format detected')
显然这种语法不正确,有人可以告诉我验证多个字段的最佳解决方案吗?
样本数据(索引 4 和 5 应该抛出错误):
names_and_dates = [{'date': '10-10-2018', 'name': 'Monday'},
{'date': '11-10-2018', 'name': 'Tuesday'},
{'date': '12-10-2018', 'name': 'Wednesday'},
{'date': '13-10-2018', 'name': 'Thursday'},
{'date': '2018-10-14', 'name': 'Friday'},
{'date': '15-10-2018', 'name': 55}]
解决方案
您快到了:
import datetime
def validate_content(row):
try:
datetime.datetime.strptime(row["date"], '%d-%m-%Y')
except:
raise ValueError('Incorrect date format detected: {}'.format( row["date"] ))
if not isinstance(row["name"], str):
raise ValueError('Incorrect name format detected: {}'.format( row["name"] ))
names_and_dates = [{'date': '10-10-2018', 'name': 'Monday'},
{'date': '11-10-2018', 'name': 'Tuesday'},
{'date': 'Hello world', 'name': 'Tuesday'},
{'date': '12-12-2020', 'name': 55},
]
for index, item in enumerate(names_and_dates):
try:
validate_content(item)
except Exception as e:
print("Error in item {}: {}".format(index, e))
输出:
Error in item 2: Incorrect date format detected: Hello world
Error in item 3: Incorrect name format detected: 55
推荐阅读
- keras - 相对于 epoch 更改自定义损失参数和 NN 参数
- python - SQL 计数值大于列集阈值的行
- javascript - JAVASCRIPT:即使存在返回语句,渲染也没有返回任何内容
- tiff - 我可以修改多页 tiff 中的总页数吗?
- c# - 取消任务引发异常但任务继续
- c# - 从 RestSharp 响应反序列化 JSON
- python - 使用带有 unigrams 和 bigrams 的 Tfidf 向量化的文本分类器模型
- amazon-dynamodb - GSI 排序键上的 DynamoDB 不等于
- java - 无法在 Android 中解析方法“getJSModule”
- django - 如何显示具有外键关系的记录的详细信息