python中的docopt给了我一些问题

时间:2015-04-23 00:28:27

标签: python python-3.x

我有一组三个程序,我试图合并为一个。它们都是单独工作的,但是在尝试让它们一起工作时我遇到了问题。我目前遇到的问题是第一部分代码:

import os
import sys
from contextlib import closing

import colorama  # $ pip install colorama
import docopt  # $ pip install docopt
import socks  # $ pip install PySocks
import stem.process  # $ pip install stem
from sockshandler import SocksiPyHandler  # see pysocks repository
from stem.util import term

try:
    import urllib2
except ImportError: # Python 3
    import urllib.request as urllib2

args = docopt.docopt(__doc__, version='0.2')
colorama.init(strip=not (sys.stdout.isatty() or args['--color']))

当我运行程序时,我收到此错误:

Traceback (most recent call last):
  File "cilantro.py", line 34, in <module>
    args = docopt.docopt(__doc__, version='0.2')
  File "C:\Python34\lib\site-packages\docopt.py", line 558, in docopt
    DocoptExit.usage = printable_usage(doc)
  File "C:\Python34\lib\site-packages\docopt.py", line 468, in printable_usage
    raise DocoptLanguageError('"usage:" (case-insensitive) not found.')
docopt.DocoptLanguageError: "usage:" (case-insensitive) not found.

为什么我收到此错误消息?相同的代码在原始程序中正常工作。

1 个答案:

答案 0 :(得分:3)

使用docopt时,您需要为脚本编写 __ doc __ 字符串。 docopt解析此字符串以确定如何处理命令行选项和参数。

要修复此问题,以及类似“import os”上方的以下文字(因此这是文件中的第一件事):

SELECT brgy_locat, municipali, bldg_name,  bldg_type, 
gridcode, building_count
FROM (SELECT brgy_locat, municipali, bldg_name, gridcode, bldg_type,
      count( bldg_name) as building_count
      FROM hi
      GROUP BY 1, 2, 3, 4, 5) cnt_hi
FULL JOIN (SELECT brgy_locat, municipali,bldg_name, gridcode, bldg_type
      FROM med
      GROUP BY 1, 2, 3, 4, 5) cnt_med 
USING (brgy_locat, municipali, bldg_name,gridcode,bldg_type)
FULL JOIN (SELECT brgy_locat, municipali,bldg_name,gridcode, bldg_type
      FROM low
      GROUP BY 1, 2, 3, 4, 5) cnt_low 
USING (brgy_locat, municipali, bldg_name, gridcode, bldg_type);

有关此用法字符串内容的更多详细信息,请参阅docopt文档,http://docopt.org/