使用查询者

时间:2016-10-19 16:35:09

标签: python

我试图检查输入的长度是否有效:

questions = [
    inquirer.Text('b_file', message='.GBK File',
                  validate=lambda file: len(str(file))),
    inquirer.Text('e_file', message='.XLS File',
                  validate=lambda file: len(str(file)))]

但是没有工作。说这不是一个有效的输入:

>>> import inquirer
>>> questions = [
...     inquirer.Text('b_file', message='.GBK File',
...                   validate=lambda file: len(str(file))),
...     inquirer.Text('e_file', message='.XLS File',
...                   validate=lambda file: len(str(file)))]
>>> answers = inquirer.prompt(questions)
[?] .GBK File: foo
>> "foo" is not a valid b_file.

1 个答案:

答案 0 :(得分:0)

validate使用的函数必须使用两个参数;第一个是先前给出答案的字典,第二个是当前答案。

code to handle validation捕获所有异常并将其转换为验证错误,因此使用仅包含一个参数的lambda将始终导致验证失败。

让你的lambda也接受答案词典;你可以忽略给定的值:

questions = [
    inquirer.Text('b_file', message='.GBK File',
                  validate=lambda answers, file: len(str(file))),
    inquirer.Text('e_file', message='.XLS File',
                  validate=lambda answers, file: len(str(file)))]

通过这一改变,问题起作用:

>>> import inquirer
>>> questions = [
...     inquirer.Text('b_file', message='.GBK File',
...                   validate=lambda answers, file: len(str(file))),
...     inquirer.Text('e_file', message='.XLS File',
...                   validate=lambda answers, file: len(str(file)))]
>>> answers = inquirer.prompt(questions)
[?] .GBK File: foo
[?] .XLS File: bar
>>> pprint(answers)
{'b_file': 'foo', 'e_file': 'bar'}