本文介绍了IndexError:解析方法参数时元组索引超出范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经检查了这个问题,但不能'在那里找到答案.这是一个演示我的用例的简单示例:

I've already checked this question, but couldn't find an answer there. Here is a simple example that demonstrates my use case:

def log(*args):
    message = str(args[0])
    arguments = tuple(args[1:])
    # message itself
    print(message)
    # arguments for str.format()0
    print(arguments)
    # shows that arguments have correct indexes
    for index, value in enumerate(arguments):
        print("{}: {}".format(index, value))
    # and amount of placeholders == amount of arguments
    print("Amount of placeholders: {}, Amount of variables: {}".format(message.count('{}'), len(arguments)))

    # But this still fails! Why?
    print(message.format(arguments))

log("First: {}, Second: {}, Third: {}, Fourth: {}", "asdasd", "ddsdd", "12312333", "fdfdf")

和输出:

First: {}, Second: {}, Third: {}, Fourth: {}
('asdasd', 'ddsdd', '12312333', 'fdfdf')
0: asdasd
1: ddsdd
2: 12312333
3: fdfdf
Amount of placeholders: 4, Amount of variables: 4
Traceback (most recent call last):
  File "C:/Users/sbt-anikeev-ae/IdeaProjects/test-this-thing-on-python/test-this-thing.py", line 12, in <module>
    log("First: {}, Second: {}, Third: {}, Fourth: {}", "asdasd", "ddsdd", "12312333", "fdfdf")
  File "C:/Users/sbt-anikeev-ae/IdeaProjects/test-this-thing-on-python/test-this-thing.py", line 10, in log
    print(message.format(arguments))
IndexError: tuple index out of range

P.S: 我已经拒绝使用这样的方法(包装 str.format()),因为它似乎是多余的.但还是让我很困惑,为什么这不能按预期工作?

P.S: I've already refused using such a method (that wraps str.format()), as it seems to be excess. But still it puzzles me, why wouldn't this work as expected?

推荐答案

你必须使用 * 将元组解包为 format 的实际参数:

you have to use * to unpack the tuple into actual arguments for format:

print(message.format(*arguments))

否则,arguments 被视为格式的唯一参数(它适用于第一次 {} 出现,通过将您的元组转换为字符串,但当它遇到第二次出现 {})

otherwise, arguments is seen as the sole argument of format (and it works for the first {} occurrence, by converting your tuple to string, but chokes when it encounters the second occurrence of {})

这篇关于IndexError:解析方法参数时元组索引超出范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 08:12