对性感有什么条件规定吗



是否有办法使用voluptuous来定义条件规则?

这是我的模式:

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

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

我该怎么做呢?有项目的github页面上的信息,但我找不到我的情况。

对于类似的问题,我的解决方案是这样做

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)

这将为您提供适当的验证,尽管错误消息可能会变得有点神秘。您可以编写更加定制的Any版本来改进错误消息。

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一致。

另一种方法是为整个字典编写一个验证器函数,该函数将同时检查resolutionbitrate,尽管这样您将编写一些通常从voluptuous免费获得的代码。

[1] https://github.com/alecthomas/voluptuous验证函数

最新更新