有没有任何条件的规则来纵欲?

2024-05-29 03:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法定义条件规则使用诱惑?在

下面是我的模式:

from voluptuous import Schema, All, Any

schema = Schema({
    'resolution': All(str, Any('1920x1080', '1280x720')),
    'bitrate': 20,
})

没关系,但现在我想验证基于分辨率值的比特率值。如果我有1920x1080作为分辨率,那么我需要知道比特率是这些值中的一个:20、16、12、8;当它是{}时,比特率应该是以下值之一:10、8、6、4。在

我怎么能做到呢?有关于project's github page的信息,但我在那里找不到我的箱子。在


Tags: fromimport定义规则schema模式分辨率any
2条回答

我解决类似问题的方法是

from voluptuous import Schema, Any

lo_res = Schema({'resolution': '1280x720', 'bitrate': Any(10, 8, 6, 4)})
hi_res = Schema({'resolution': '1920x1080', 'bitrate': Any(20, 16, 12, 8)})
schema = Any(lo_res, hi_res)

这将为您提供正确的验证,尽管错误消息可能会变得有点神秘。您可以编写任何一个更自定义的版本来改进错误消息。在

Voluptuous支持自定义验证函数[1],但它们只接收当前验证的值作为输入参数,而不接收任何其他以前验证过的值。这意味着尝试做一些类似'bitrate': (lambda bitrate, resolution: Any(20, 16, 12, 8) if bitrate in (...) else Any (10, 8, 6, 4))的事情很不幸是行不通的。在

您可以尝试使用'bitrate': Any(20, 16, 12, 10, 8, 6, 4),然后自己执行二次验证,以确保它与resolution一致。在

另一种方法可以是为完整的字典编写一个验证器函数,该函数将同时检查resolution和{},不过这样你就可以编写一些正常情况下免费获得的代码。在

[1]https://github.com/alecthomas/voluptuous#validation-functions

相关问题 更多 >

    热门问题