5

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 ページに情報がありますが、私のケースが見つかりません。

4

2 に答える 2

8

同様の問題に対する私の解決策は、次のようなことをすることです

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 のよりカスタマイズされたバージョンを記述して、エラー メッセージを改善することができます。

于 2014-12-23T08:29:21.857 に答える