如何使用 click.prompt 从用户那里获取有效日期?

How to use click.prompt to get a valid date from the user?

您好,

我实际上正在学习如何使用点击包中的一些元素,我希望能够通过使用 prompt 命令从用户那里获取有效日期。

我试图查找文档,我在 http://click.pocoo.org/5/prompts/:

下找到了这个

To manually ask for user input, you can use the prompt() function. By default, it accepts any Unicode string, but you can ask for any other type.

所以我写了这段代码并尝试将 class datetime.datetime 作为所需的输入类型传递:

import datetime

value = click.prompt("Enter a date", type=datetime.datetime)

当我执行此代码时出现提示,但在我输入有效日期并按回车键后我收到此错误消息:

Traceback (most recent call last): File "", line 1, in File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/termui.py", line 98, in prompt result = value_proc(value) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py", line 38, in call return self.convert(value, param, ctx) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py", line 87, in convert return self.func(value) TypeError: an integer is required (got type str)

拜托,你能告诉我我在这段代码中做错了什么吗?

基本上我想通过编写类似这段(部分虚构的)代码来获得正确格式化的日期值:

import datetime

value = click.prompt("Enter a date", 
                     type=datetime.datetime,
                     format="%d/%m/%Y",
                     default=datetime.datetime.now())

非常感谢

Click 现在似乎不处理日期,但它可能在将来会发生变化。

相反,您可以使用 value_proc 参数传递解析器。我用过 dateutil,但如果你愿意,可以将其更改为 datetime

from dateutil import parser
import click

def parse(value):
    try:
        date = parser.parse(value)
    except:
        raise click.BadParameter("Couldn't understand date.", param=value)
    return value

value = click.prompt("Enter a date", value_proc=parse)