【问题标题】:How to use click.prompt to get a valid date from the user?如何使用 click.prompt 从用户那里获取有效日期?
【发布时间】:2017-02-06 22:04:12
【问题描述】:

你好,

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

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

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

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

import datetime

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

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

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/click/termui.py”,第 98 行,提示符 结果 = value_proc(值) 调用中的文件“/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())

非常感谢

【问题讨论】:

    标签: python python-click


    【解决方案1】:

    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)
    

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多