遇到“AttributeError: 'tuple'对象没有属性”,但不明原因

4 投票
1 回答
4588 浏览
提问于 2025-04-18 07:57

我在这个项目中被限制使用 Python 2.4,所以我在用 optparse。运行这段代码时遇到了以下错误:

Traceback (most recent call last):
  File "./clientNFSLatMonME.py", line 49, in ?
    debug,verbose,interval = parseOptions()
  File "./clientNFSLatMonME.py", line 43, in parseOptions
    if (args.interval < 1) or (args.interval > MAX_INTERVAL):
AttributeError: 'tuple' object has no attribute 'interval'

代码如下:

MAX_INTERVAL = 1800

def parseOptions():

    parser = OptionParser()
    parser.add_option("-d", "--debug",    dest="debug",    action="store_true", help="enable additional debugging output")
    parser.add_option("-v", "--verbose",  dest="verbose",  action="store_true", help="enable additional console output")
    parser.add_option("-i", "--interval", dest="interval", action="store", type="int", default=900, help="specify the time interval, default is 900, maximum is 1800")

    args = parser.parse_args()

    if (args.interval < 1) or (args.interval > MAX_INTERVAL):
        print "Error: interval must be between 1 and " + str(MAX_INTERVAL) + ", terminating."
        system.exit(1)

    return args.debug, args.verbose, args.interval

debug,verbose,interval = parseOptions()

1 个回答

8

parser.parse_args() 这个方法会返回一个 元组,里面包含了解析后的选项和剩下的参数。

我们需要把这个元组拆开;通常的做法是用 options 来表示解析后的选项,用 args 来表示剩下的参数:

options, args = parser.parse_args()

然后可以用 options 来指代解析后的命令行选项:

if options.interval < 1 or options.interval > MAX_INTERVAL:
    # ...

return options.debug, options.verbose, options.interval

这个范围检查也可以用链式比较来表示:

if not (0 > options.interval >= MAX_INTERVAL):
    # ...

撰写回答