【问题标题】:python getopt throws GetoptError option --mode must not have an argumentpython getopt 抛出 GetoptError 选项 --mode 不能有参数
【发布时间】:2025-11-21 22:15:02
【问题描述】:

当我指定命令行选项时,GetOpt 似乎不起作用,引发异常,此文件名为 o.py:

import getopt
import sys
opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode', 'perf'])
for opt_name,opt_value in opts:
    if opt_name in ('--mode'):
        print opt_name
        continue
    if opt_name in ('--perf'):
        print opt_name
        continue

然后我得到运行时异常:

python o.py --mode=a
Traceback (most recent call last):
File "o.py", line 3, in <module>
    opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode', 'perf'])
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py", line 88, in getopt
    opts, args = do_longs(opts, args[0][2:], longopts, args[1:])
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py", line 159, in do_longs
    raise GetoptError('option --%s must not have an argument' % opt, opt)
getopt.GetoptError: option --mode must not have an argument
opts, args = do_longs(opts, args[0][2:], longopts, args[1:])

文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py”,第 159 行,在 do_longs raise GetoptError('option --%s 不能有参数' % opt, opt) getopt.GetoptError: option --mode 不能有参数

那么我在哪里做错了,如何解决呢?

【问题讨论】:

    标签: python exception getopt


    【解决方案1】:

    您的长选项名称缺少尾随 =。见docs,即:

    longopts,如果指定,必须是一个字符串列表,其中包含应支持的长选项名称。选项名称中不应包含前导“--”字符。 需要参数的长选项后应跟一个等号 ('=')...

    opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode=', 'perf='])
    

    【讨论】: