【问题标题】:Docopt - Errors, exit undefined - CLI interface for Python programmeDocopt - 错误,退出未定义 - Python 程序的 CLI 接口
【发布时间】:2023-03-17 07:04:01
【问题描述】:

我确信这个问题的答案就在那里,但我已经阅读了网站信息,我已经观看了他们制作的视频,并且我试图找到一个非常基本的教程,但我找不到。我整天都在搞这个,这对我来说真的没有意义。

这是我的错误:

vco@geoHP:~$ python3 a_blah.py "don't scare the cats" magic
Traceback (most recent call last):
  File "a_blah.py", line 20, in <module>
    arguments = docopt.docopt(__doc__)
  File "/usr/lib/python3/dist-packages/docopt.py", line 579, in docopt
    raise DocoptExit()
docopt.DocoptExit: Usage: 
    a_blah.py <start>... <end>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "a_blah.py", line 33, in <module>
    except DocoptExit:
NameError: name 'DocoptExit' is not defined

第 20 行 - 我不明白为什么该行会产生错误,它以前工作过,我在其他程序中看到过确切的行?

我不知道为什么 docopt 的第 570 行会产生错误 - 我见过其他人使用 DocoptExit(),这不只是 Docopt 的一部分吗?我必须为此编写自己的退出函数吗? (我还没有看到其他人这样做)

这是代码

import docopt

if __name__ == '__main__':

    try:
        arguments = docopt.docopt(__doc__)

        print(arguments['<start>'])

        print("that was that")

        print(arguments['<end>'])       

    except docopt.DocoptExit:
        print("this hasn't worked")

我正在尝试制作一个我编写的脚本,它根据文件的扩展名将文件从一个地方移动到另一个地方。

因此命令行中的参数将是文件类型、起始目录、目标目录以及在它们被移动后从起始目录中删除它们的选项。

我正在尝试(但失败)让 docopt 在将它包含在其他脚本中之前自行处理它。

【问题讨论】:

    标签: python command-line-interface docopt


    【解决方案1】:

    您想要的例外是在docopt 的命名空间中。你永远不会将它导入你的全局命名空间,所以你不能简单地用它的名字来引用它。需要单独导入或者通过模块引用。您也不应该在异常后使用括号。

    import docopt
    
    try:
        # stuff
    except docopt.DocoptExit:
        # other stuff
    

    import docopt
    from docopt import DocoptExit
    
    try:
        # stuff
    except DocoptExit:
        # other stuff
    

    【讨论】:

    • 干杯罗杰,我原来有那个设置,不记得为什么我改变了......但是现在那个部件工作了,谢谢,它打印'这不起作用'这就是我告诉它的到(不确定是否有内置错误消息)我仍然不确定如何添加多个强制参数。我已将代码更新为目前的样子
    • @user3130747 最好保留原来的代码。更改它会使后来来到这里的其他人与类似的问题混淆。如果您有其他与代码相关的问题,最好提出一个新问题并在那里描述新问题。
    • 哦,对了,好点...虽然这些问题是 OP 的一部分,但我正在努力弄清楚如何设置参数,我应该为此再发一篇帖子吗?干杯
    • @user3130747 我建议将代码还原为原来的样子,并可能编辑问题以专门针对DocoptExit 错误。这就是我至少阅读问题的方式。然后针对另一个问题提出一个单独的问题,并提供您如何尝试完成它以及您一直遇到的问题的具体示例。
    • 同意罗杰。我什至没有意识到你还有其他问题,直到我读到这条评论,@user3130747
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多