3

你好,

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

我试图查找文档,并在http://click.pocoo.org/5/prompts/下找到了这个:

要手动要求用户输入,您可以使用 prompt() 函数。默认情况下,它接受任何 Unicode 字符串,但您可以要求任何其他类型。

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

import datetime

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

当我执行此代码时,会出现提示,但在我插入有效日期并按 Enter 键后,我收到以下错误消息:

回溯(最后一次调用):文件“”,第 1 行,在文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/termui.py”,第 98 行,在提示结果 = value_proc(value) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py”,第 38 行,调用 返回 self.convert (值,参数,ctx)文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/types.py”,第87行,在转换中返回self.func(值) TypeError: 需要一个整数(得到类型 str)

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

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

import datetime

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

非常感谢

4

1 回答 1

4

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)
于 2017-02-07T10:37:06.397 回答