使用带有str.format()的元组时的正确语法

时间:2018-02-26 13:51:02

标签: python string format tuples

我有一些麻烦影响到str.format()方法的元组值,如下所示:

tpl = ("alpha", "omega")
msg = "From {} to {} "
print(msg.format(tpl))

Python给我一个tuple index out of range错误,编号大括号无法解决它。

2 个答案:

答案 0 :(得分:1)

你用一个参数(这是一个元组)调用format,而它期望用两个调用。它不会自动解包元组和列表。

但是您可以通过将格式设置为*args参数来格式化元组/列表:

tpl = ("alpha", "omega")
msg = "From {} to {} "
print(msg.format(*tpl))

您也可以**kwargs执行此操作:

params = {"a": 1, "b": 2}
print("{a} {b}".format(**params))

答案 1 :(得分:0)

我制作了一个用于查找和测试不同语法的脚本。 我很高兴发现我也可以将它与命名参数混合在一起。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" format syntax with tuple"""

t = ("alpha", "omega")
v = "to"

m = "From {} {} {} "
ms = "From {0} to {1}"
msg = "From {0} {var} {1} "

expr_list = [
    "t, v",
    "m.format(t, v)",
    "m.format(*t, v)",
    "ms.format(t)",
    "msg.format(t, v)",
    "msg.format(t, var=v)",
    "msg.format(*t, var=v)",
]

for num, expr in enumerate(expr_list):
    try:
        print("Expr{}, <{}>: «{}»".format(num, expr, eval(expr)))
    except Exception as except_detail:
        print("Expr{}, <{}> : Exception «{}»".format(num, expr, except_detail))

它返回:

Expr0, <t, v>: «(('alpha', 'omega'), 'to')»
Expr1, <m.format(t, v)> : Exception «tuple index out of range»
Expr2, <m.format(*t, v)> : Exception «only named arguments may follow *expression (<string>, line 1)»
Expr3, <ms.format(t)> : Exception «tuple index out of range»
Expr4, <msg.format(t, v)> : Exception «'var'»
Expr5, <msg.format(t, var=v)> : Exception «tuple index out of range»
Expr6, <msg.format(*t, var=v)>: «From alpha to omega »