我有一些麻烦影响到str.format()
方法的元组值,如下所示:
tpl = ("alpha", "omega")
msg = "From {} to {} "
print(msg.format(tpl))
Python给我一个tuple index out of range
错误,编号大括号无法解决它。
答案 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 »