2016-10-22 42 views
1

我使用妖嬈的0.9.2,並且我有獨家類的問題。我需要的是,如果沒有任何鍵,它應該會給出錯誤。但是,這對於性感而言是可以接受的。這是一個性感的錯誤?如果沒有,我該如何爲它編寫一個腳本?妖嬈專屬類

爲了澄清我的問題,假設我們建立這樣一個模式:

schema = Schema({Exclusive('a', 'z'): int, Exclusive('b', 'z'): int, 'c': int}, required=True) 

我需要一個和給予只在排除組的關鍵之一。 但是當我用{'c': 5}進行測試時,即使我沒有給ab,它似乎也是有效的。 我不知道如何使它適用於這種情況。

+1

直至今日,仍然有一個懸而未決的問題,要求此功能:https://github.com/alecthomas/voluptuous/issues/ 115 – VPfB

回答

1

OptionaldocumentationExclusive繼承,這意味着ab在你的模式可選;這就是爲什麼{'c': 5}是有效的輸入。爲了解決這個問題,你需要明確指定他們的要求:

from voluptuous import Schema, Exclusive, Required 
schema = Schema({Required(Exclusive('a', 'z')): int, Required(Exclusive('b', 'z')): int, 'c': int}, required=True) 
+0

您的解決方案使a和b包含在內。這意味着相反,如果我們給出一個,它也需要b。我想要的是相反的。我不會把a和b放在一起,而只是其中的一個。 –

+0

在這種情況下,你不能把a和b放在同一個組中,即使用Exclusive('a','b')? –

+0

獨佔('a','b')表示a是b組的成員。我已經把a和b放到了同一個組中,即z。 –