python - 验证字典列表中元素格式正确的最佳实践

标签 python validation try-catch

我有一个包含来自 API 的数据的字典列表,并且想要迭代此列表,并验证每个键的数据格式是否正确。我有单独的函数可以实现这一目标,但是我想将它们集成到一个整体函数中。

例如从此:

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}]

最佳答案

只是一些小的修改:

from datetime import datetime

def validate_content(row):
    try:
        datetime.strptime(row['date'], '%d-%m-%Y')
    except ValueError:
        raise ValueError('Incorrect date format detected')

    if not isinstance(row['name'], str):
        raise ValueError('Incorrect name format detected')
  1. 不是一个普通的 except ,而是一个 except ValueError (如果字典不包含 'date' ,这不会捕获引发的异常key;这可能应该在其他地方处理)
  2. isinstance 仅返回 False,但如果实例不是 str,则不会引发错误;用 try/except 包围它不会达到您想要的效果。

实际操作:

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}]

for row in names_and_dates:
    try:
        validate_content(row)
        print('valid row {}'.format(row))
    except ValueError as e:
        print('invalid row {}\n  exception: {}'.format(row, e))

将输出:

valid row {'date': '10-10-2018', 'name': 'Monday'}
valid row {'date': '11-10-2018', 'name': 'Tuesday'}
valid row {'date': '12-10-2018', 'name': 'Wednesday'}
valid row {'date': '13-10-2018', 'name': 'Thursday'}
invalid row {'date': '2018-10-14', 'name': 'Friday'}
  exception: Incorrect date format detected
invalid row {'date': '15-10-2018', 'name': 55}
  exception: Incorrect name format detected

关于python - 验证字典列表中元素格式正确的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52950797/

相关文章:

python - 我应该使用什么分类模型?机器学习新手。需要推荐

node.js - sails.js/waterline 验证错误处理

c# - catch 中是否支持通用异常?

c++ - 捕获处理程序未执行

python - 快速 Pandas 过滤

python - 如何将python float转换为要在C++程序中解释的字节

php - 我的代码有什么问题?检查每个括号和分号后继续获取 "unexpected end of file"

python - Python 中仅当所有 try 语句都成功时才运行语句

python - Python中的重载()运算符

jquery - ASP.net MVC 验证在不正确的字段上突出显示和图标 Jquery